【问题标题】:Does "-dndebug" (lower-case) do anything in g++?“-dndebug”(小写)在 g++ 中有什么作用吗?
【发布时间】:2014-06-17 06:27:22
【问题描述】:

我正在对一个多平台 C++ 项目进行细微的更改,该项目包含一个 400 行的 Linux makefile,该文件是其他人多年前创建的。

makefile 中有两行使用 -dndebug(小写)作为 g++ 的命令行参数。
我认为其目的是定义 ndebug 符号,但是当它是小写时,这个参数甚至会做任何事情吗?

我对 g++ 和 make 的了解很少,但是通过下面链接的页面,我认为参数需要大写才能起作用。
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

【问题讨论】:

  • gcc 确实有-d 选项,但它是用于调试编译器通过自身。你不需要它。即使它是有意的,-dndebug 也是无效的(但例如 -da 是)。所以我想应该是-DNDEBUG,但是有人搞砸了。
  • 致任何编辑此问题的人:我认为将标题中的“dndebug”更改为“DNDEBUG”的编辑是不恰当的,因为问题的全部意义在于询问它是否在较低的案例。

标签: c++ makefile g++


【解决方案1】:

是的,应该是大写的-DNDEBUG

-D 是定义宏的 GCC 选项。 NDEBUG 是定义为按照 C 标准要求关闭断言的宏。

我对 g++ 和 make 知之甚少,但是通过下面链接的页面,我认为参数需要大写才能起作用。

至于-dndebug,由于宏区分大小写,我认为它不会产生任何影响,即它应该被忽略,除非你有一些引用它的代码。

【讨论】:

    【解决方案2】:

    测试起来相当容易:

    $ cat test.cpp
    #include <iostream>
    
    int main()
    {
    #ifdef TEST_DEFINE
        std::cout << "defined" << std::endl;
    #endif
        return 0;
    }
    
    $ g++ -o 1 -DTEST_DEFINE test.cpp
    $ ./1
    defined
    $ g++ -o 2 -dTEST_DEFINE test.cpp
    cc1plus: warning: unrecognized gcc debugging option: T [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: S [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: T [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: _ [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: F [enabled by default]
    cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
    $ ./2
    $
    

    如您所见,-d 选项实际上会导致编译器警告,所以看起来-D 是预期的。

    【讨论】:

    • 啊,这解释了我在制作过程结束时看到的四个警告。我没有将这些警告与该论点联系起来,尽管我很惊讶“e”和“u”是唯一无法识别的字符。谢谢。
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 2012-05-13
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2014-06-19
    相关资源
    最近更新 更多