如何检测命令行发出的GCC标志-g?
我正在尝试一些GCC的标志,看看当我们在命令行发出标志-g
时,它是否定义了预处理器的任何宏。
例如,当我们标记-fpie
和-fPIE
时,两者都定义了宏__pie__
和__PIE__
。
所以,我想知道如果我们标记-g
或-g3
,类似的事情会发生。
我做了一些测试,但cpp
清单上没有任何结果。
$ gcc -g3 -E main_debug_flags.c > main_debug_flags.LIST.c
测试代码
很简单:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
#ifndef DEBUG
printf("DEBUG not defined!\n");
#else
printf("DEBUG defined!\n");
#endif
#ifndef NDEBUG
printf("NDEBUG not defined!\n");
#else
printf("NDEBUG defined!\n");
#endif
return 0;
}
有人知道吗?也许,任何人都面临过同样的疑问!
另一种方法是手动定义宏-DDEBUG
,以确保代码将通过一些预处理器检查进行编译。
读数
我查了一些文件,但什么都没查到!
- GCC:The Complete Reference,by亚瑟Griffith(McGraw-Hill/Osborne)
- The Definitive Guide to GCC Second Edition,by William von哈根(Apress,2006)
- 使用GNU编译器集合,用于gcc版本13.0.0
我编译了一个简单的代码,调试标志打开,并检查预处理器输出,看看是否有什么东西出现。但是什么都没有!
我想做的是用#ifdef
检测-g
标志,并包含额外的代码来帮助调试应用程序本身!
1条答案
按热度按时间hjzp0vay1#
不,没有内置的宏来提供调试信息,类似于gcc的
__OPTIMIZE__
来优化。有一个简单的理由-调试信息可以是外部的,也可以在编译后从二进制文件中剥离。