"-dndebug"(小写)在 g++ 中有什么作用吗?
Does "-dndebug" (lowercase) do anything in g++?
我正在对一个多平台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就是您想要的。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用