目录
如何查看编译器提示存在非标准代码?
GCC提供-pedantic选项可以在发现非标准C/C++代码时,显示警告信息。
The -pedantic option directs GCC to print a warning message if any of these features is used.
- 比如使用case范围匹配:
警告:在 switch 语句中使用范围表达式不符合标准 [-Wpedantic]
如何知道当前编译器默认C/C++标准是多少?
GCC
- 参考gcc官方网站和发行说明信息,搜索”default for C code“或”default for C++ code“.
- man gcc搜索"default for C code"或"default for C++ code".
- 利用-dM -E参数获取
g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
- g++ 11.4.0输出的结果#define __cplusplus 201703L,代表默认C++17.
gcc -dM -E -x c /dev/null | grep -F STDC_VERSION
- gcc 11.4.0输出的结果define STDC_VERSION 201710L,即代表默认C17.
- 也可加入-std=xxx选项来检测:gcc -dM -E -x c -std=c11 /dev/null | grep -F STDC_VERSION会得到201112L.
代码中,可以用__STDC_VERSION__宏(C99之前不支持)和__cplusplus宏判断编译器支持的C标准和C++标准版本。
- C99标准的值为199901L,C11标准的值为201112L,C17标准的值为201710L.
- C++98标准的值为199711L,C++11标准的值为201103L,C++14标准的值为201402L,C++17标准的值为201703L,C++20标准的值为202002L.
GCC有提供命令查看编译器基本配置吗?
有的时候,我们想知道编译器默认是什么配置,比如是默认32位或者64位。GCC有提供-dumpspecs选项可以一窥究竟。
gcc -dumpspecs
命令,用于输出 GCC 的内部规格说明(specifications). 它们包括了GCC 在编译程序时使用的默认设置和选项,以及它如何处理不同的源文件和目标文件,对于了解GCC内部机制、处理编译和调试的问题、调优有很大帮助。如下截取了默认架构的设定(默认64位,同时可支持32位):
*multilib_defaults:
m64
*multilib_extra:
*multilib_matches:
m32 m32;m64 m64;mx32 mx32;
编译警告和错误
有时警告是没用的,普京说,多少次警告都不如飞机翅膀振几次。
不同语言的编译警告
- C语言可使用-Wall打开所有警告,也可以将某些或所有警告设置为error.
禁用编译警告
- MSVC提供#pragma 预处理禁止warning的方式,例如禁止输出警告代号3088:
#pragma warning(disable: 3088) - C# 提供 #pragma warning disable <warn_no> 禁用特定编译警告,#pragma warning restore <warn_no> 恢复编译警告。也提供编译选项中 /nowarn:warn0,warn1,... 禁用warning list.
提示警告或错误
- C/ObjC/C++/C# 提供#warning和#error显式提示编译器此处有warning和error.
编译行号
- C/ObjC/C++/C# 提供 #line 强制编译器认为当前的行号。
- C# 还提供 #line default 恢复编译器源代码真实的行号。
Clang也兼容MSVC?
没错,Clang设计目标是GCC & MSVC compatibility,Windows版本的Clang编译器,默认clang.exe是兼容GCC选项,clang-cl.exe是兼容MSVC编译选项。
编译器如何把warning当做error?
- GCC/Clang编译C/ObjC,仅仅用-Werror选项并不能将所有warning都当做error,有些warning默认就没开启。比如-Wuninitialized. 需要二者都开启,才会生效。
gcc -Werror -Wuninitialized xxx.c
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
1.您还可以访问 迷软科技 网站:https://www.minicoda.com
2.想学习更多知识,您可以关注 微信公众号 : 程序员小迷 ( miniminicode )(一个关注于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift等语言软件开发技能技巧经验的公众号)