[英]C++ Preprocessor definitions
谁能定义什么是杂散定义? 第二个问题是:我读的是他的书中的“ 21天自学c ++”,他说我们不应该定义DEBUG一词。 我想知道为什么吗?
问题的第一部分:
杂散定义是一个预处理器定义,它可以更改某些其他代码(或实际代码)的行为,这很可能不是故意的。 例如,您可以编写一个头文件并使用以下行:
#define main is_awesome
这不会对您的头文件产生任何直接影响,甚至可能对您的代码也没有任何直接影响,但是包含此头文件的其他人在包含int main(int argc, char **argv)
函数的文件中会遇到问题,因为这个错误的定义会将函数的名称更改为int is_awesome(int argc, char **argv)
,突然之间,该应用程序不再是main
入口点!
以类似的方式,宏DEBUG
可能会导致此类问题。 通常, DEBUG
仅应由编译器本身定义,这取决于它是否在构建调试代码(根据您的编译器,您可能还必须自行设置它)。 如果您要在某个地方定义DEBUG
,则即使您实际上是在创建发行版,也可能触发调试代码。
通常,很难发现此类错误或问题,特别是如果您不知道如何查看预处理的代码(您看不到基本代码和最可能的行号中的问题/错误)时,尤其如此。报告也将关闭)。
如何避免这种情况? 三个简单的规则将使您和他人的生活更加轻松:
#undef
)。 MYLIB_DEBUG
而不是定义DEBUG
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.