谁能定义什么是流浪定义?.第二个问题是:我在他说我们不应该定义术语DEBUG的书中阅读“在21天内自学c ++”。我想知道为什么?
问问题
470 次
1 回答
7
问题的第一部分:
杂散定义是一个预处理器定义,它改变了一些其他代码(或实际代码)的行为,这很可能不是有意的。例如,您可以编写一个头文件并使用以下行:
#define main is_awesome
这不会对您的头文件产生任何直接影响,甚至可能不会在您的代码中产生任何影响,但是在包含该函数的文件中包含此头文件的其他人int main(int argc, char **argv)
会遇到问题,因为这个杂散定义会int is_awesome(int argc, char **argv)
突然将该函数的名称更改为应用程序不再有main
入口点!
以类似的方式,宏DEBUG
可能会导致此类问题。通常,DEBUG
只能由编译器本身定义,具体取决于它是否正在构建调试代码(根据您的编译器,您可能还必须自己设置它)。如果您DEBUG
自己定义某个地方,即使您实际上是在创建发布版本,您也可能会触发调试代码。
通常,此类错误或问题很难追踪,尤其是如果您不知道如何查看预处理代码(您看不到基本代码中的问题/错误和最有可能的行号)报告也将关闭)。
如何避免这种情况?三个简单的规则将使您和他人的生活更轻松:
- 仅在确实需要时使用预处理器定义(例如,在编译时控制代码包含)。
- 始终清理
#undef
头文件之外不需要的 ( ) 预处理器定义。 - 如果您必须使用一些全局预处理器定义,请使其名称唯一,例如通过添加库或项目名称。例如,
DEBUG
您可以使用MYLIB_DEBUG
.
于 2013-08-29T23:42:47.003 回答