gpt4 book ai didi

c++ - 我应该使用哪些编译标志来避免运行时错误

转载 作者:可可西里 更新时间:2023-11-01 17:55:36 25 4
gpt4 key购买 nike

刚学here当代码可以调用 UB 时,-Wsequence-point 编译标志将弹出警告。我在类似

的声明中尝试过
int x = 1;
int y = x+ ++x;

而且效果非常好。到目前为止,我只使用 -ansi -pedantic -Wall 使用 gccg++ 进行编译。您是否有任何其他有用的标志来使代码更加安全和健壮?

最佳答案

正如 alk 总结的那样,使用这些标志:

-pedantic -Wall -Wextra -Wconversion


首先,我认为您不想使用 -ansi 标志,如 Should I use "-ansi" or explicit "-std=..." as compiler flags? 中所建议的那样

其次,-Wextra似乎也很有用,如 -Wextra how useful is it really? 中所建议的那样

第三,-Wconversion似乎也很有用,如 Can I make GCC warn on passing too-wide types to functions? 中所建议的那样

第四,-pedantic也很有帮助, 正如 What is the purpose of using -pedantic in GCC/G++ compiler? 中所建议的那样.

最后,在这种情况下启用 -Wall 应该没问题,所以我很怀疑你说的话。

示例 :

Georgioss-MacBook-Pro:~ gsamaras$ cat main.c 
int main(void)
{
int x = 1;
int y = x+ ++x;
return 0;
}
Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
main.c:4:16: warning: unsequenced modification and access to 'x' [-Wunsequenced]
int y = x+ ++x;
~ ^
main.c:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.
Georgioss-MacBook-Pro:~ gsamaras$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

示例 , 相同版本:

Georgioss-MacBook-Pro:~ gsamaras$ cp main.c main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
main.cpp:4:16: warning: unsequenced modification and access to 'x'
[-Wunsequenced]
int y = x+ ++x;
~ ^
main.cpp:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.

相关answer在我看来,Wall 又一次用类似的问题挽救了局面。

关于c++ - 我应该使用哪些编译标志来避免运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43963271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com