首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#定义NULL NULL

#定义NULL NULL
EN

Stack Overflow用户
提问于 2009-12-23 06:38:39
回答 6查看 7.9K关注 0票数 9
代码语言:javascript
复制
#ifndef NULL
#define NULL NULL
#endif

此代码在没有任何警告/错误的情况下在gcc中编译。有人能解释一下预处理器在这里做什么吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-23 06:41:06

只要编译器看到文本"NULL“,它就会将其替换为文本"NULL”。这就像在代码中搜索并替换"NULL“,并替换为"NULL”。不是非法的,只是很奇怪:)

票数 20
EN

Stack Overflow用户

发布于 2009-12-23 06:45:25

这样做的唯一可能的原因是在包含头文件之前这样做,头文件本身做类似这样的事情

代码语言:javascript
复制
#ifndef NULL
#define NULL (void *)0
#endif

这将阻止NULL像这样被定义。

票数 15
EN

Stack Overflow用户

发布于 2009-12-23 07:02:46

我见过这样的代码将值从编译器名称空间(通常是“名称空间”,而不是C++ namespace)带入预处理器名称空间的情况。

代码语言:javascript
复制
// In the compiler namespace, not in the preprocessor namespace
static int const FOO = 1234;

// Bring the constant into the preprocessor namespace as well
#ifndef FOO       // <---- FOO really is undefined here.
#define FOO FOO
#endif

非常丑陋的东西。

就我个人而言,我还没有发现这种东西的用途,但仍然存在。

编辑:虽然我已经看到了这一点,但我不知道它为什么有用,除了检查"FOO“是否在代码中的其他地方定义为预处理器符号;也许是在处理一些遗留代码时。有没有人?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1949670

复制
相关文章

相似问题

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