作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
超越设置-Wall
,并设置 -std=XXX
,还有哪些其他真正有用但鲜为人知的编译器标志可用于 C?
我对任何额外的警告特别感兴趣,和/或在某些情况下将警告转化为错误以绝对减少任何意外的类型不匹配。
最佳答案
这是我的:
-Wextra
和 -Wall
: 必不可少。-Wfloat-equal
: 很有用,因为通常测试 float 是否相等是不好的。-Wundef
: 如果在 #if
指令中评估了未初始化的标识符,则发出警告。-Wshadow
: 每当一个局部变量隐藏另一个局部变量、参数或全局变量,或者当一个内置函数被隐藏时发出警告。-Wpointer-arith
: 如果有任何东西取决于函数或 void
的大小,则发出警告。-Wcast-align
:每当转换指针时发出警告,以增加目标所需的对齐方式。例如,如果在只能在两字节或四字节边界访问整数的机器上将 char *
转换为 int *
时发出警告。-Wstrict-prototypes
: 如果在未指定参数类型的情况下声明或定义函数,则会发出警告。-Wstrict-overflow=5
:警告编译器基于未发生签名溢出的假设进行优化的情况。 (值 5 可能过于严格,请参阅手册页。)-Wwrite-strings
: 给字符串常量类型 const char[
length]
以便将一个的地址复制到非 const char *
指针会收到警告。-Waggregate-return
: 如果定义或调用了任何返回结构或 union 的函数,则发出警告。-Wcast-qual
: 每当转换指针以从目标类型中删除类型限定符时发出警告*。-Wswitch-default
: 当 switch
语句没有 default
case* 时发出警告。-Wswitch-enum
: 当 switch
语句具有枚举类型的索引并且缺少该枚举的一个或多个命名代码的 case
时发出警告*。 -Wconversion
: 警告可能改变值的隐式转换*。-Wunreachable-code
: 如果编译器检测到代码永远不会被执行,则发出警告*。那些标记为*的有时会给出太多虚假警告,所以我根据需要使用它们。
关于c - 对 C 有用的 GCcflags是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375697/
在流程的链接部分,是否存在 -ansi、-Wall 和 -pedantic 等标志可能相关的情况? -O 优化标志怎么样?它们仅在编译步骤期间相关,还是在链接期间也相关? 谢谢! 最佳答案 在实践中,
我正在编写一个简单的 C 程序,我应该用缓冲区溢出来攻击它。所以,我不想在编译时使用任何标志。如何消除使用的默认标志? # readelf -p .GCC.command.line stack Str
我正在尝试在 powerpc arch 上运行 Rust 程序。当我在 C 中构建我的代码时,我使用标志 -mlongcall。 我如何为我的 Rust 程序使用这个标志?一般来说,如果我能在我的 R
我真的需要一些基本问题的帮助。我即将永远放弃学习 GCC,因为基础知识对我来说似乎没有意义。我已经阅读了数百篇文章,但无法弄清楚如何通过 configure 获得基本的 -std=c++11 工作调用
我是一名优秀的程序员,十分优秀!