在 Linux 系统中如何查看和指定 C 语言标准

2023-05-16

本文主要介绍在 Linux 系统中如何查看当前支持的 C 语言版本,以及在编译时如何指定 C 语言标准。

目前常见的 C 语言标准有 C89、C99、C11 和 C17,详情可参考《C语言标准》。

查看 C 语言标准

我们可以通过 gcc 命令查看当前支持的 C 语言标准,具体命令如下:

gcc -E -dM - </dev/null | grep "STDC_VERSION"

输出结果和 C 标准的对应关系如下:

如果是 #define __STDC_VERSION__ 199901L,则默认支持的是 C99 标准;

如果是 #define __STDC_VERSION__ 201112L,则默认支持的是 C11 标准;

如果是 #define __STDC_VERSION__ 201710L,则默认支持的是 C17 标准;

如果没查到,则默认支持的是 C89 标准。

指定 C 语言标准编译

当我们查询到当前 GCC 编译器支持的 C 语言标准后,如果想在编译时指定 C 语言标准,可以使用 -std 选项参数进行指定,常用的(非全部)选项如下:

-std=c17        # Conform to the ISO 2017 C standard
-std=c11        # Conform to the ISO 2011 C standard
-std=c99        # Conform to the ISO 1999 C standard
-std=c90        # Conform to the ISO 1990 C standard
-std=c89        # Conform to the ISO 1990 C standard

-std=gnu17      # Conform to the ISO 2017 C standard with GNU extensions
-std=gnu11      # Conform to the ISO 2011 C standard with GNU extensions
-std=gnu99      # Conform to the ISO 1999 C standard with GNU extensions
-std=gnu90      # Conform to the ISO 1990 C standard with GNU extensions
-std=gnu89      # Conform to the ISO 1990 C standard with GNU extensions

在 Linux 系统中,默认情况下如果不指明 -std 选项,GCC 会使用 -std=gnu11 作为默认支持的 C 语言版本,也就是 C11 标准加上 GCC extension 的组合。

例如,程序 main.c 如下:

#include <stdio.h>

int main()
{
    for(int i=0; i<10; i++)
    {
        printf("%d\n", i);
    }

    return 0;
}

指定 C89 标准编译

gcc main.c -o test -std=c89

会出现如下错误

main.c: In function ‘main’:
main.c:5:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
    5 |     for(int i=0; i<10; i++)
      |     ^~~
main.c:5:5: note: use option ‘-std=c99’, ‘-std=gnu99’, ‘-std=c11’ or ‘-std=gnu11’ to compile your code

这是因为 C89 标准不支持在 for 循环中声明变量 i,指定 C99 标准再次编译则不会有问题。

gcc main.c -o test -std=c99
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 系统中如何查看和指定 C 语言标准 的相关文章

随机推荐

  • 【BIM+GIS】ArcGIS Pro在地理数据库中使用BIM内容

    文章目录 一 BIM地理数据库概述 二 BIM文件至地理数据库 三 结束语 一 BIM地理数据库概述 可以在地理数据库中组织 ArcGIS 中的数据作为其地理空间信息的记录系统 可在地理数据库中表示建筑物信息建模 BIM 内容 以利用其诸多
  • 【BIM+GIS】Revit在ArcGIS Pro中的组织方式详解

    ArcGIS Pro 中的 Revit 文件是组织成工作空间 数据集和要素类 因此它们只是类似于地理数据库或 shapefile 的数据源 而且是只读数据源 一 受支持的 Revit 几何 Revit 文件 RVT 包含根据对象分组 称为类
  • 【BIM+GIS】ArcGIS Pro3.0打开多种格式三维模型案例教程

    本文讲解在ArcGIS Pro3 0打开BIM模型 rvt 倾斜模型OSGB Sketchup skp 3d max 3ds 点云数据 las 的方法及注意事项 文章目录 一 ArcGIS Pro打开BIM rvt 二 ArcGIS Pro
  • 【点云概述】什么是点云、来源、种类、特点、处理?

    文章目录 一 什么是点云 二 点云的来源 三 点云的种类 四 点云的特点 五 点云的处理 一 什么是点云 点云 point cloud 是空间中点的数据集 可以表示三维形状或对象 通常由三维扫描仪获取 点云中每个点的位置都由一组笛卡尔坐标
  • 深入剖析Redis客户端Jedis的特性和原理

    一 开篇 Redis作为目前通用的缓存选型 xff0c 因其高性能而倍受欢迎 Redis的2 x版本仅支持单机模式 xff0c 从3 0版本开始引入集群模式 Redis的Java生态的客户端当中包含Jedis Redisson Lettuc
  • 【BIM+GIS】Supermap打开BIM Revit模型的方式

    Revit导出Supermap GIS格式数据的方法通常有三种 插件式导出 直接导入和标准交换格式 IFC 导出 文章目录 一 Revit安装Supermap插件 1 安装Supermap插件 2 UDB导出模型 3 打开模型 二 Revi
  • 【BIM+GIS】Supermap加载实景三维倾斜摄影模型

    OSGB是常见的倾斜模型格式 本文讲述如何在Supermap中加载实景三维倾斜摄影模型OSGB 文章目录 一 生成配置文件 二 加载倾斜模型 1 新建场景 2 添加模型 3 高程调整 一 生成配置文件 点击 三维数据 数据管理 生成配置文件
  • 【BIM+GIS】BIM模型导入GIS软件之前的一些处理设置

    文章目录 一 模型位置发生偏移 二 模型对象丢失或增加 三 模型材质发生变化 四 导出过程缓慢 五 模型属性批量丢失 一 模型位置发生偏移 在视图 可见性 图形替换模型类别 场地 VV可见性快捷 勾选项目基点 单击选中项目基点 在属性中修改
  • vscode中用快捷键 Alt + Shift + F 格式化代码不生效的问题

    vscode中用快捷键 Alt 43 Shift 43 F 格式化代码不生效 xff08 文件中 script脚本部分的代码没有格式化 xff09 的问题 在 vscode 中书写代码 xff0c 有时候缩进格式不一致 xff0c 代码没有
  • 查询 Linux 命令属于哪个软件包

    在 Linux 中 xff0c 有些命令的名称软件包的名称是不一样的 xff0c 或者一个软件包中包含有多个命令 有时候 xff0c 我们需要确定某个命令来自于哪个软件包 xff0c 以便于可以在其他机器上安装 xff0c 或者寻找该软件包
  • 一文读懂 NMEA-0183 协议数据

    NMEA 是 National Marine Electronics Association 的缩写 xff0c 是美国国家海洋电子协会的简称 xff0c 现在是 GPS 导航设备统一的 RTCM 标准协议 NMEA 0183 协议是目前
  • 使用 GPSD 快速读取 GPS 信息

    在 Linux 系统中 xff0c 如果你需要连接 GPS 传感器进行测试 xff0c 那么使用 GPSD 可以满足你的需求 xff0c 帮助你快速实现 GPS 数据的获取 本文将使用导远 INS570D 传感器 xff08 车载高精度组合
  • 如何将 Markdown 格式文章快速发布到微信公众号

    如果你和我一样 xff0c 平时习惯使用 Markdown 写作 xff0c 当我们想把文章发布到微信公众号或知乎等平台时 xff0c 就会发现挺麻烦的 xff0c 尤其是排版方面 xff0c 因为它们并不支持 Markdown 格式 那有
  • 推荐几款好用的数据库管理工具

    本文主要介绍几款常用的数据库管理软件 xff08 客户端 xff09 xff0c 包括开源 免费的 商用收费的 xff0c 其中有一些是专用于 MySQL 数据库的 xff0c 例如 MySQL Workbench phpMyAdmin x
  • Ubuntu 22.04(Jammy)安装 ROS2(Humble)

    本文介绍如何在 Ubuntu 22 04 xff08 Jammy xff09 上安装 ROS 2 软件包 xff0c ROS 2 的版本是当前最新的 Humble Hawksbill 本教程适用于 amd64 和 arm64 平台 准备工作
  • 从落地效果看,转转选择TDengine的三个理由

    在转转的业务中 xff0c 我们使用了Nginx作为我们的反向代理 xff0c 为保证代理层可用性 xff0c 需要对Nginx进行实时状态监控 在服务器的基础监控的选择上 xff0c 我们将OpenFalcon逐步替换为夜莺 xff0c
  • 计算字符串 s 构成的最长回文串长度

    题目 给定一个包含大写字母和小写字母的字符串 s 返回通过这些字母构成的最长的回文串 在构造过程中 请注意区分大小写 比如 Aa 不能当做一个回文字符串 示例 1 输入 s abccccdd 输出 7 解释 我们可以构造的最长的回文串是 d
  • 常见激光雷达厂商 SDK 软件包汇总

    本文收集目前主要激光雷达厂商的 SDK 软件包 xff0c 其中大多还会提供 ROS xff08 ROS1 和 或 ROS2 xff09 驱动软件包 使用这些 SDK 软件包 xff0c 可以快速地将激光雷达集成到你的智能系统中 xff0c
  • GitHub 开启 2FA 双重身份验证的方法

    为什么要开启 2FA 自2023年3月13日起 xff0c 我们登录 GitHub 都会看到一个要求 Enable 2FA 的重要提示 xff0c 具体如下 xff1a GitHub users are now required to en
  • 在 Linux 系统中如何查看和指定 C 语言标准

    本文主要介绍在 Linux 系统中如何查看当前支持的 C 语言版本 xff0c 以及在编译时如何指定 C 语言标准 目前常见的 C 语言标准有 C89 C99 C11 和 C17 xff0c 详情可参考 C语言标准 查看 C 语言标准 我们