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)
-------------------------------------
Why does a1 print "15 < FOO", but not "15 < FOO"?
Why does a2 print "17 < 10", but not "17 < FOO"?
--
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn