2
#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”——即数字一

4

4 回答 4

3

在我的 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 平台上的值为unix1 已在 IOCCC 条目中使用。1987年“最佳一班轮奖”得主。

http://www.ioccc.org/years.html#1987_korn

代码是:

    main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
于 2012-01-12T15:31:55.240 回答
3

显然在#define linux 1某个地方(或-Dlinux=1)。

于 2012-01-12T15:23:04.623 回答
1
#undef linux
#define TEST one-of-a-linux
于 2012-01-12T15:27:01.953 回答
0

你的代码中有一个#definefor linuxto 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

适当地打印预期的答案!

于 2012-01-12T15:33:50.147 回答