#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");
}
之一的A-1
而不是
之一的一個Linux的
注意, 「LINUX」 變爲 「1」 - 即數字1
#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");
}
之一的A-1
而不是
之一的一個Linux的
注意, 「LINUX」 變爲 「1」 - 即數字1
顯然有#define linux 1
某處(或-Dlinux=1
)。
#undef linux
#define TEST one-of-a-linux
在一般情況下,可能不想這樣做,以防其他系統頭文件(可能使用'linux')被包含在內。 – 2012-01-12 15:29:12
'undef linux'後面可以跟'#define linux linux' – ugoren 2012-01-12 15:44:20
@DanFego:如果後面緊跟着主例如給出的例子,否則不行。一般來說,你不會在頭上做這個... – 2012-01-12 16:03:58
在我的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);}
你在你的代碼的某個地方有linux
到1
一個#define
。以下工作正常!
#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
打印適當的期望答案!
這意味着'linux'是一個評估爲'1'的宏。 – fge 2012-01-12 15:23:05
如果您使用的是gcc,您可能需要嘗試使用'-std = c89'或'-std = c99'來避免此問題。 – 2012-01-12 15:29:14
@CharlesBailey:第三方的好奇心,爲什麼會有幫助? – 2012-01-12 15:30:42