【问题标题】:gcc - pedantic wont compile, ISO C90 forbids mixed declarations and code How to fix this?gcc - pedantic 不会编译,ISO C90 禁止混合声明和代码如何解决这个问题?
【发布时间】:2026-02-07 14:50:02
【问题描述】:

我需要该代码让我的程序有颜色。但是如果我使用-pedantic,它将无法编译。有没有解决的办法?顺便说一句

gcc -pedantic MP1.c -o 哈哈 MP1.c:在函数“主”中: MP1.c:65:警告:ISO C90 禁止混合声明和代码 MP1.c:686:30:警告:(每个输入文件只会报告一次)

第 65 行:

int originalAttrs = ConsoleInfo.wAttributes;

【问题讨论】:

    标签: c gcc


    【解决方案1】:

    originalAttrs 的声明移动到使用它的范围的顶部。该错误与ConsoleInfo.wAttributes 的使用无关,但与originalAttrs 的声明位置有关。看不到整个代码,大概是这样的:

    printf("hello\n"); /* For example. */
    int originalAttrs = ConsoleInfo.wAttributes;
    

    修复:

    int originalAttrs;
    printf("hello\n"); /* For example. */
    originalAttrs = ConsoleInfo.wAttributes;
    

    【讨论】:

      【解决方案2】:

      要么修复代码,使其符合 C90 标准(如 hmjd's answer 建议的那样),要么告诉 gcc 使用更新版本的标准。

      C 允许以 C99 标准开头的混合声明和语句。

      如果你使用

      gcc -std=c99 -pedantic
      

      gcc -std=c11 -pedantic
      

      它应该可以工作。

      【讨论】: