A
Alex Vinokur
Here are two programs.
--- foo1.c ---
#include <assert.h>
#define FOO 10
int main()
{
assert (15 < FOO);
return 0;
}
-------------
--- foo2.c ---
#include <assert.h>
#define FOO 10
#define ASSERT(x) assert(x)
int main()
{
ASSERT (17 < FOO);
return 0;
}
-------------
// gcc 3.3.3
$ gcc -W -Wall foo1.c -o a1
// No errors/warnings
$ gcc -W -Wall foo2.c -o a2
// No errors/warnings
$ ./a1
assertion "15 < FOO" failed: file "foo1.c", line 5
Aborted (core dumped)
$ ./a2
assertion "17 < 10" failed: file "foo2.c", line 6
Aborted (core dumped)
$ gcc -dM -E foo1.c | grep ASSERT
// No output
$ gcc -dM -E foo2.c | grep ASSERT
#define ASSERT(x) assert(x)
--- foo1.c ---
#include <assert.h>
#define FOO 10
int main()
{
assert (15 < FOO);
return 0;
}
-------------
--- foo2.c ---
#include <assert.h>
#define FOO 10
#define ASSERT(x) assert(x)
int main()
{
ASSERT (17 < FOO);
return 0;
}
-------------
// gcc 3.3.3
$ gcc -W -Wall foo1.c -o a1
// No errors/warnings
$ gcc -W -Wall foo2.c -o a2
// No errors/warnings
$ ./a1
assertion "15 < FOO" failed: file "foo1.c", line 5
Aborted (core dumped)
$ ./a2
assertion "17 < 10" failed: file "foo2.c", line 6
Aborted (core dumped)
$ gcc -dM -E foo1.c | grep ASSERT
// No output
$ gcc -dM -E foo2.c | grep ASSERT
#define ASSERT(x) assert(x)