在我的班级工作中,我已经成功完成了这项工作,但仅限于非常简单的程序。今天,我有一个更复杂的程序,在我将DEBUG定义为符号之后,Eclipse做了可怕的borky事情,这些可怕的事情在我删除定义后并没有消失。另一个消息来源告诉我,gcc编译器正在使用符号DEBUG,并且我自己通过定义来干扰标准库。
我自己可以使用#define DEBUG吗?或者不是?
答案 0 :(得分:5)
是的,完全可以自己定义符号DEBUG
。但是不确定符号_DEBUG
(注意前导下划线):以下划线和大写字母开头的符号或两个下划线保留供实现使用(也就是编译器和工具链)。由于它们是保留的,你不应该自己定义它们,但你当然可以测试它们的存在。参见C99标准的第7.1.3节。
要注意的另一个符号是NDEBUG
,您可以自由定义或不定义,但如果您在包含<assert.h>
之前定义它,则会导致所有assert
要删除的语句。
答案 1 :(得分:2)
如果删除符号无法解决您的问题,则该符号不会导致您的问题。
我从未听说过DEBUG
作为符号,但_DEBUG
是used by Visual Studio。另外,NDEBUG
使用<assert.h>
来关闭断言语句。
答案 2 :(得分:1)
DEBUG
对于那种事情来说是一种通用的,只是因为地球上数以百万计的代码猴子中的每一只都会有同样的想法。
你最好不要使用不太可能发生冲突的事情,例如PAX_DEBUG
或YOURCOMPANYNAME_BTREEMODULE_DEBUG
或类似事情。
答案 3 :(得分:0)
这可能是可能的,但你不要试图找出答案,这肯定是不好的做法。
答案 4 :(得分:0)
这就是为什么“较新”的语言有namespaces。不要使用它。在我们的代码中,我们会使用_DEBUG
代替(或者您可以使用_DEBUG_
或__DEBUG__
,有些人不喜欢在前面使用单个下划线。
编辑:我错误地使用了_DEBUG(我们不使用它)。我们使用__DEBUG__
(正面和背面有两个下划线)。