"-dndebug"(小写)在 g++ 中有什么作用吗?

Does "-dndebug" (lowercase) do anything in g++?

本文关键字:什么 作用 g++ -dndebug 小写      更新时间:2023-10-16

我正在对一个多平台c++项目做一些小的修改,这个项目有一个400行Linux makefile,是别人几年前创建的。

makefile中的两行使用-dndebug(小写)作为g++的命令行参数。
我认为目的是定义ndebug符号,但是当它是小写的时候,参数有什么用吗?

我对g++和Make知之甚少,但是,根据选项控制预处理器页面,我认为参数需要大写才能工作。

是的,应该是这样的大写-DNDEBUG

-D是用于定义宏的GCC选项。NDEBUG是要定义的宏,用于根据C标准强制关闭断言。

我对g++和Make知之甚少,但是,根据选项控制预处理器页面,我认为参数需要大写才能工作。

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

很容易测试:

测试程序 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就是您想要的。