#include <stdio.h>
#define QUOTE(str) #str
#define EXPAND_AND_QUOTE(str) QUOTE(str)
#define TEST one-of-a-linux
int main() {
printf(EXPAND_AND_QUOTE(TEST)"\n");
}
我得到:
一对一
而不是
一个linux
请注意,“linux”变为“1”——即数字一
在我的 Linux 机器上:
$ gcc -dM -E - < /dev/null | grep 'linux\|unix'
#define __unix__ 1
#define __linux 1
#define __unix 1
#define __linux__ 1
#define __gnu_linux__ 1
#define unix 1
#define linux 1
$
请注意,unix 平台上的值为unix
1 已在 IOCCC 条目中使用。1987年“最佳一班轮奖”得主。
http://www.ioccc.org/years.html#1987_korn
代码是:
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
显然在#define linux 1
某个地方(或-Dlinux=1
)。
#undef linux
#define TEST one-of-a-linux
你的代码中有一个#define
for linux
to 1
。以下工作正常!
#include <stdio.h>
#undef linux
#define QUOTE(str) #str
#define EXPAND_AND_QUOTE(str) QUOTE(str)
#define TEST one-of-a-linux
int main(void)
{
printf(EXPAND_AND_QUOTE(TEST)"\n");
return 0;
}
输出:
/*
$ gcc mm.c
$ ./a.out
one-of-a-linux
$
*/
笔记:
#define TEST 1linux
#define TEST linux1
适当地打印预期的答案!