我应该使用哪些编译标志来避免运行时错误
刚刚在这里了解到-Wsequence-point
comiplation标志会在代码调用UB时弹出警告。 我在类似的声明上尝试过
int x = 1; int y = x+ ++x;
它工作得非常好。 到目前为止,我只使用-ansi -pedantic -Wall
编译gcc
或g++
。 你有没有其他有用的标志来使代码更安全和健壮?
总结起来,使用这些标志:
-pedantic -Wall -Wextra -Wconversion
首先,我认为你不想使用-ansi
标志, 我应该使用“-ansi”或显式“-std = …”作为编译器标志吗?
其次, -Wextra
似乎也非常有用,正如-Wextra中所建议的那样它真的有用吗?
第三, -Wconversion
似乎也很有用,如我所说, 我可以让GCC警告将过多的类型传递给函数吗?
第四, -pedantic
也是有帮助的,正如在GCC / G ++编译器中使用-pedantic的目的是什么? 。
最后,启用-Wall
在这种情况下应该没问题,所以我很怀疑你说的是什么。
gcc示例:
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
g ++示例,相同版本:
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.
我的相关答案 ,Wall再次以类似的问题挽救了这一天。