#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");
}
私は得る:
1 の 1
それよりも
唯一無二の Linux
「linux」が「1」になることに注意してください。つまり、数字の 1 です。
明らかに#define linux 1
どこかに(または-Dlinux=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);}
#undef linux
#define TEST one-of-a-linux
コードのどこかに#define
forがあります。以下はうまくいきます!linux
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
予想される答えを適切に出力します!