Linux 下centos 查看 -std这个编译时命令 是否支持 C17

简介: Linux 下centos 查看 -std这个编译时命令 是否支持 C17

实际工作中,可能会遇到c++的一些高级特性,例如std::invoke,此函数是c++17才引入的,如何判断当前的gcc是否支持c++17呢,这里提供两种办法。

根据gcc的版本号来推断

gcc --version,可以查看版本号,笔者的电脑,gcc的版本号是8.3.0,然后查看8.3.0是什么时候发布的,查出是2019年发布的,从而推断出是支持,但是不是十分肯定,所以接着看第二种方法

  1. 根据gcc的版本号来推断

gcc --version,可以查看版本号,笔者的电脑,gcc的版本号是8.3.0,然后查看8.3.0是什么时候发布的,查出是2019年发布的,从而推断出是支持,但是不是十分肯定,所以接着看第二种方法

  1. 直接man gcc

上图中,红色方框-std=表示支持的标准项,可以看到c11,c17之类的


centos 本身自带的版本是不支持到C17的。截取 man gcc如下

 -std=
           Determine the language standard.   This option is currently only supported when compiling C or
           C++.

           The compiler can accept several base standards, such as c90 or c++98, and GNU dialects of those
           standards, such as gnu90 or gnu++98.  When a base standard is specified, the compiler accepts all
           programs following that standard plus those using GNU extensions that do not contradict it.  For
           example, -std=c90 turns off certain features of GCC that are incompatible with ISO C90, such as
           the "asm" and "typeof" keywords, but not other GNU extensions that do not have a meaning in ISO
           C90, such as omitting the middle term of a "?:" expression. On the other hand, when a GNU dialect
           of a standard is specified, all features supported by the compiler are enabled, even when those
           features change the meaning of the base standard.  As a result, some strict-conforming programs
           may be rejected.  The particular standard is used by -Wpedantic to identify which features are
           GNU extensions given that version of the standard. For example -std=gnu90 -Wpedantic warns about
           C++ style // comments, while -std=gnu99 -Wpedantic does not.


            A value for this option must be provided; possible values are

           c90
           c89
           iso9899:1990
               Support all ISO C90 programs (certain GNU extensions that conflict with ISO C90 are
               disabled). Same as -ansi for C code.

           iso9899:199409
               ISO C90 as modified in amendment 1.

           c99
           c9x
           iso9899:1999
           iso9899:199x
               ISO C99.  Note that this standard is not yet fully supported; see
               <http://gcc.gnu.org/c99status.html> for more information.  The names c9x and iso9899:199x are
               deprecated.

           c11
           c1x
           iso9899:2011
               ISO C11, the 2011 revision of the ISO C standard.  Support is incomplete and experimental.
               The name c1x is deprecated.

           gnu90
           gnu89
               GNU dialect of ISO C90 (including some C99 features). This is the default for C code.

           gnu99
           gnu9x
               GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC, this will become the
               default.  The name gnu9x is deprecated.

           gnu11
           gnu1x
               GNU dialect of ISO C11.  Support is incomplete and experimental.  The name gnu1x is
               deprecated.

           c++98
           c++03
               The 1998 ISO C++ standard plus the 2003 technical corrigendum and some additional defect
               reports. Same as -ansi for C++ code.

           gnu++98
           gnu++03
               GNU dialect of -std=c++98.  This is the default for C++ code.

           c++11
           c++0x
               The 2011 ISO C++ standard plus amendments.  Support for C++11 is still experimental, and may
               change in incompatible ways in future releases.  The name c++0x is deprecated.
 gnu++11
           gnu++0x
               GNU dialect of -std=c++11. Support for C++11 is still experimental, and may change in
               incompatible ways in future releases.  The name gnu++0x is deprecated.

           c++1y
               The next revision of the ISO C++ standard, tentatively planned for 2017.  Support is highly
               experimental, and will almost certainly change in incompatible ways in future releases.

           gnu++1y
               GNU dialect of -std=c++1y.  Support is highly experimental, and will almost certainly change
               in incompatible ways in future releases.

分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za


目录
相关文章
|
2天前
|
Linux Shell 开发工具
|
2天前
|
网络协议 安全 Linux
|
1天前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
10 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
8天前
|
运维 监控 网络协议
Linux抓包命令tcpdump使用技巧大全
【7月更文挑战第10天】
29 5
Linux抓包命令tcpdump使用技巧大全
|
5天前
|
存储 安全 Linux
Linux命令sync详解
`sync`命令在Linux中用于将内存缓冲区的数据强制写入磁盘,保证数据持久性和一致性。它在关机、重启或重要文件操作前后使用,以防数据丢失。工作原理是强制将内存中的数据同步到磁盘,特点是阻塞式执行且通常无需参数。常见用法包括安全关机、数据备份和配置文件修改后确保更改生效。应注意,过度使用可能影响性能,应适时使用`fsck`检查文件系统一致性。
|
5天前
|
安全 数据管理 Shell
Linux命令su详解
`su`命令在Linux中用于切换用户身份,常用于权限管理。它允许用户无须注销当前会话就切换到另一个用户,尤其是root。`su`有多种选项,如`-`或`--login`加载目标用户环境,`-c`执行指定命令后返回。使用时需注意权限安全,建议用`sudo`以减少风险。通过限制`/etc/pam.d/su`可加强访问控制。`su`在系统维护和数据管理中扮演角色,但不直接处理数据。
|
5天前
|
存储 运维 安全
Linux命令stat:深入了解文件与文件系统状态
`stat`命令在Linux中用于显示文件和文件系统的详细状态,包括权限、大小、时间戳等。它通过读取inode获取信息,特点是显示全面、易用且支持多种参数,如`-c`自定义格式,`-f`查看文件系统状态,`-L`处理符号链接。例如,`stat example.txt`显示文件详情,`stat -c &quot;%n 的大小是 %s 字节&quot; example.txt`输出文件大小。理解`stat`有助于系统管理和故障排查。
|
5天前
|
关系型数据库 MySQL Linux
Linux命令systemctl详解
`systemctl`是Linux系统用于管理systemd服务的核心命令,它与systemd守护进程交互,实现启动、停止、重启服务及查看服务状态等功能。主要参数包括`start`、`stop`、`restart`、`status`、`enable`和`disable`等。例如,启动Apache服务使用`systemctl start httpd.service`,查看服务状态用`systemctl status &lt;service&gt;`。使用时需注意权限,服务名通常以`.service`结尾,但命令中可省略。最佳实践包括利用tab键补全、定期查看服务状态和合理配置服务自启。
|
5天前
|
安全 Linux 数据安全/隐私保护
Linux命令strings详解
`strings`是Linux工具,用于从二进制文件中提取可打印字符串,常用于文件分析、安全审计和逆向工程。它可以识别至少4个连续可打印字符的序列,并支持多种参数,如`-n`调整最小长度,`-f`显示文件名。示例用法包括`strings /bin/ls`和`strings -n 6 /usr/bin/uptime | grep GLIBC`。注意敏感信息泄露,结合其他命令可增强分析能力。
|
5天前
|
存储 监控 Linux
stdbuf命令在Linux中的深度解析
`stdbuf`是Linux工具,用于控制命令的stdin、stdout和stderr的缓冲模式。它可以设置为无缓冲、行缓冲或块缓冲,以优化数据处理和实时性。例如,`stdbuf -o0 cmd`禁用cmd的输出缓冲,`-oL`则按行缓冲。在需要实时监控或高效处理大量数据时,选择合适的缓冲模式至关重要。注意,过度使用无缓冲可能影响性能,并非所有系统都支持`stdbuf`。