编译警告选项
-Wall: 开启所有常见的编译警告。
-Wextra: 启用额外的警告,不包括在-Wall中。
-Wpedantic: 检查ISO C和ISO C++标准的严格遵守。
-Wunused: 检查未使用的变量、函数和标签。
-Wuninitialized: 检查未初始化的变量。
-Wshadow: 检查局部变量遮蔽全局变量的情况。
-Wpointer-arith: 检查无效的指针运算。
-Wcast-qual: 检查类型转换时丢失const或volatile限定符的情况。
-Wstrict-prototypes: 要求函数原型的严格声明。
-Wmissing-prototypes: 检查未声明的函数原型。
-Wmissing-declarations: 检查未声明的全局变量。
-Wredundant-decls: 检查重复的声明。
-Wnested-externs: 检查嵌套的外部声明。
-Winline: 报告无法内联的函数。
-Wconversion: 检查可能导致类型转换问题的代码。
-Wfloat-equal: 检查浮点数值的直接比较。
-Wunsafe-loop-optimizations: 检查循环优化的安全性。
-Wstrict-aliasing: 检查严格的别名规则。
-Wstrict-overflow: 检查溢出优化可能导致的问题。
-Wformat: 检查printf和scanf系列函数的格式字符串。
-Wformat-security: 检查格式字符串是否存在安全漏洞。
-Wformat-y2k: 检查年份是否符合Y2K问题的解决方案。
-Wnonnull: 检查是否将非空指针传递给要求非空参数的函数。
要查看完整的警告选项列表,请参阅GCC文档中的选项部分:https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
GCC具有许多命令行选项,可以用于调整编译器的行为。以下是一些常用的GCC参数:
-o : 指定输出文件的名称。例如:
gcc myfile.c -o myfile
-c: 只编译源代码,不进行链接。产生一个目标文件(.o文件)。例如:
gcc -c myfile.c
-S: 将源代码编译成汇编代码,不进行链接。例如:
gcc -S myfile.c
-E: 只进行预处理,不进行编译和链接。例如:
gcc -E myfile.c
-I: 添加包含文件的搜索路径。例如:
gcc -Iinclude myfile.c -o myfile
-L: 添加库文件的搜索路径。例如:
gcc myfile.c -Llib -o myfile
-l: 链接指定的库。例如:
gcc myfile.c -lm -o myfile
这里-lm告诉GCC链接数学库(libm)。
-g: 在可执行文件中包含调试信息。例如:
gcc -g myfile.c -o myfile
-O: 指定优化级别。级别可以是0、1、2、3,其中0表示不进行优化,3表示最高优化级别。例如:
gcc -O2 myfile.c -o myfile
-std=: 指定要使用的C或C++语言标准。例如:
c
gcc -std=c99 myfile.c -o myfile
-f: 指定特定的编译器选项。例如:
gcc -fno-strict-aliasing myfile.c -o myfile
这里-fno-strict-aliasing禁用了严格的别名检查。
-W: 指定警告选项,前面已经讲解过。
-D: 定义一个宏。例如:
gcc -DDEBUG myfile.c -o myfile
-U: 取消宏定义。例如:
gcc -UDEBUG myfile.c -o myfile
-shared: 生成共享库。例如:
gcc -shared -o libmylib.so myfile.c
-fpic / -fPIC: 生成位置无关代码(Position Independent Code),通常用于创建共享库。例如:
gcc -fPIC -c myfile.c