首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个C字符串化宏会在扩展时损坏?

问为什么这个C字符串化宏会在扩展时损坏?
EN

Stack Overflow用户
提问于 2012-01-12 23:20:52
回答 4查看 173关注 0票数 2
代码语言:javascript
复制
#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

而不是

one-of-a linux

请注意,"linux“变成了"1”,即数字1。

EN

回答 4

Stack Overflow用户

发布于 2012-01-12 23:23:05

很明显,在某个地方(或-Dlinux=1)存在#define linux 1。

票数 3
EN

Stack Overflow用户

发布于 2012-01-12 23:31:55

在我的Linux机器上:

代码语言:javascript
复制
$ 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

代码是:

代码语言:javascript
复制
    main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
票数 3
EN

Stack Overflow用户

发布于 2012-01-12 23:27:02

代码语言:javascript
复制
#undef linux
#define TEST one-of-a-linux
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8837469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档