强制编译器遵循 C99 标准

2023-12-21

当我在我的项目上编码时,我发现我已经使用了一段时间的匿名结构实际上只在 C11 中可用,而不是我想要针对的标准 C99 中可用。

给出以下代码:

struct data {
    int a;
    struct {
        int b;
        int c;
    };
};

int main()
{
    struct data d;

    d.a = 0;
    d.b = 1;
    d.c = 2;
    return 0;
}

此代码只能在 C11 中编译(或者编译器扩展提供此功能并启用)。那么让我们看看不同编译器上的结果:

clang 5

compiler:
    Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
    Target: x86_64-apple-darwin13.1.0
    Thread model: posix
command: 
    clang -std=c99 -Wall test.c -o test
result: 
    **OK**

gcc 4.1

compiler:
    gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
command: 
    gcc -std=c99 -Wall test.c -o test
result: 
    **NOT OK**
    test.c:6: warning: declaration does not declare anything
    test.c: In function 'main':
    test.c:14: error: 'struct data' has no member named 'b'
    test.c:15: error: 'struct data' has no member named 'c'

gcc 4.7

compiler:
    gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
command: 
    gcc -std=c99 -Wall test.c -o test
result: 
    **OK**
    test.c: In function 'main':
    test.c:11:14: warning: variable 'd' set but not used [-Wunused-but-set-variable]

我一直尝试通过指定强制编译器进入 C99 模式-std=c99,但显然这不起作用(除了 gcc 4.1,它在没有 -std 参数的情况下编译良好)。 所以我现在的问题是,如果我编写的代码不符合我指定的标准,如何强制编译器 gcc 和 clang 在任何版本中发出错误-std?是否有一些我不知道的命令行参数?


-std=c99不会禁用语言扩展(GNU C 在 C99 中有匿名结构)。

The -pedantic http://clang.llvm.org/docs/UsersManual.html#cmdoption-pedantic (or -pedantic-errors http://clang.llvm.org/docs/UsersManual.html#cmdoption-pedantic-errors) 标志使编译器对语言扩展发出警告。

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

强制编译器遵循 C99 标准 的相关文章

随机推荐

  • 在 Spring Boot 1.4 中测试安全性

    我正在尝试测试 WebMvcTest与定义的自定义安全设置SecurityConfig class Configuration EnableWebSecurity public class SecurityConfig extends We
  • 如何在iOS中将UILabel的字体名称设置为HelveticaNeue Thin?

    我正在创建 UILabel 对于标签 我可以将字体名称设置为 HelveticaNeue Regular Light UltraLight 等 但我无法将字体名称设置为 HelveticaNeue Thin 它无法按预期工作 我喜欢 lab
  • ZoomExtents 方法调用的工作方式与通过手势激活 ZoomExtents 不同

    我一直在 MVVM 风格应用程序中开发一个小型 3D 预览窗口 创建视图 然后设置其数据上下文 因此 ZoomExtentsWhenLoaded True 似乎并不能帮助完成我需要的事情 我需要类似 ZoomExtentsWhenDataC
  • 如何使用ansible读取json文件

    我的 ansible 脚本所在的目录中有一个 json 文件 以下是json文件的内容 resources name package1 downloadURL path to file1 name package2 downloadURL
  • Apache Flink 如何处理倾斜数据?

    例如 我有一大堆单词 想统计每个单词的数量 问题是这些话是歪曲的 这意味着某些单词的频率会很高 但大多数其他单词的频率很低 在storm中 我们可以使用下面的方式来解决这个问题 首先对流进行随机分组 在每个节点中对窗口时间内本地的单词进行计
  • 为什么 JSF 2.2 在 Wildfly 上部分渲染 ajax 请求需要更多时间

    我正在努力将项目从 JSF 1 2 在 JBoss 4 2 3 上运行的 Richfaces 3 3 4 迁移到 JSF 2 2 在 Wildfly 8 1 0 上运行的 Richfaces 4 5 在部分迁移一些视图后 我发现使用 JSF
  • Objective C:Posing 可以在 ios 上使用吗?

    我正在尝试为一个 ios 项目实现摆姿势 场景 在运行时定义控制器类 https stackoverflow com questions 29424934 defining class of controller at run time 我
  • 如何将基于页面的 PHP 应用程序转换为 MVC?

    一段时间以来 我一直在努力解决如何使用 MVC 框架重新编码基于页面的 PHP 应用程序 仅作为背景 我必须将应用程序移至 MVC 因为我的老板正在让我这样做 不管怎样 我已经坐下来 打印出了目录结构 然后我开始尝试计划如何将这些页面转换为
  • 向 Keras 中 Flatten() 层的输出添加新功能

    我正在做图像分类 首先 我将图像输入 Keras 中的 CNN 模型 我想在 keras 中 Flatten 层的输出中添加新功能 然后将其输入到密集层 我该如何为其编写代码 基本上我对图像使用卷积 最后我想添加其他功能 例如年龄性别等 m
  • 如何使用lua打乱单词的字母

    我在 PHP 中使用了这个 str shuffle 函数 和梅卡this api https i stack imgur com papuI png我需要做同样的想法 将字母打乱 字母之间有空格 但使用 lua 对于使用电报机器人 我进行了
  • scrollIntoView 在所有浏览器中都有效吗?

    Does scrollIntoView 适用于所有浏览器 如果没有的话有没有jQuery选择 是的 但用户体验很差 正如 9bits 指出的那样 这长期以来一直是所有主流浏览器都支持 https developer mozilla org
  • 当 C 说全局变量的启动值为零时,是否也意味着结构成员?指针的初始值是多少?

    当 C 说全局 static 变量的启动值为零时 是否也意味着结构成员 全局 静态 指针的初始值是多少 无效的 是的 这是由 C99 6 7 8p10 指定的 如果一个对象具有自动 存储期限未初始化 明确地 它的值是 不定 如果一个对象有
  • 打印 char 数组的一部分

    So char someCArray something 我想从 某物 中打印出 ethin 您可以使用printf精度说明符 include
  • 在循环中替换 Pandas 数据框中的值

    我正在尝试循环遍历 pandas 数据框 并在某些列中的值满足某些条件时替换它们 我意识到一般有更直接的方法可以做到这一点 但在我的具体示例中 我需要一个循环 因为一行的结果可能取决于前一行 下面是一个可重现的错误示例 当我尝试替换文本时
  • `.map(f)` 和 `.map(|x| f(x))` 有什么区别?

    做的时候沙沙声standard library types iterators2 rs https github com rust lang rustlings blob main exercises standard library ty
  • 替换SWF中的字符串[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们已经为大型 Flash 项目的不同客户修改了数十个 SWF 版本 现在必须替换每个副本中脚本中嵌入的
  • 将 RMagick 与 Ocra 捆绑在一起

    我正在尝试使用 Ocra 创建 Ruby 脚本的可移植版本 该脚本取决于rmagick这还需要安装 ImageMagick 生成的可执行文件在我的计算机上可以运行 但在其他所有计算机上都会失败 除非最终用户手动安装 ImageMagick
  • 取消引用双指针

    我有一段代码片段 我无法理解它是如何工作的 因为有一行执行了双重取消引用 代码如下所示 void afunction int x x malloc 2 sizeof int x 12 x 1 13 int main int v 10 afu
  • 比较 MSE 损失和交叉熵损失的收敛性

    For a very simple classification problem where I have a target vector 0 0 0 0 and a prediction vector 0 0 1 0 2 1 would
  • 强制编译器遵循 C99 标准

    当我在我的项目上编码时 我发现我已经使用了一段时间的匿名结构实际上只在 C11 中可用 而不是我想要针对的标准 C99 中可用 给出以下代码 struct data int a struct int b int c int main str