【问题标题】:How to disable automatic inclusion of header files in CodeBlocks如何在 CodeBlocks 中禁用头文件的自动包含
【发布时间】:2020-04-16 05:19:28
【问题描述】:

过去我曾经在 Turbo C 中进行 C 编程,如果你编写这个 C 程序:

int main(){

   printf("Testing...!");
   return 0;
}

只有在开头添加#include <stdio.h> 后才会起作用。但如果我在 CodeBlocks 中运行相同的程序,它就可以工作。

是编译器还是自动包含头文件的代码块?我该如何阻止呢?我是否需要将 Turbo C 编译器(我猜是 borland)配置为 CodeBlocks 而不是 MinGW(我目前正在使用)?

【问题讨论】:

  • 我不认为 Code::Blocks 或编译器自己添加任何头文件。很可能您的警告级别太低,以至于不会弹出有关缺少声明的警告,或者 Code::Blocks 没有显示它。并且因为链接器愉快地链接到标准库,printf() 被找到并链接。将警告级别提高到最大! -- 刚试过:一个简单的gcc test.c -o test 已经报告了丢失的声明。
  • 但它应该将其报告为错误而不是警告。
  • 没有原型的编程是 K&R 风格,并且仍然完成(!)... ;-) 一些编译器允许它,这取决于所要求的标准。不过,您可以让大多数编译器将警告作为错误发出。
  • 请注意,GCC 4.x 及更早版本默认为 C90 标准,这或多或少允许问题中的代码 — 使用 puts() 是安全的,但严格来说,函数采用变量参数列表,如printf(),即使在 C90 中也必须在范围内有一个原型(否则,行为是未定义的——这意味着它可能无论如何都可以工作,但不能保证)。 GCC 5.1 及更高版本默认为 C11(编译器从未默认为 C99),这意味着需要原型(嗯,函数声明,最好是原型)。

标签: c mingw codeblocks


【解决方案1】:

您应该检查 CodeBlocks 中的“编辑器设置”。有一个“默认代码”选项。您可以根据需要进行修改。

【讨论】:

  • 什么都不做
【解决方案2】:

正如@thebusybee 建议提高警告级别,解决了问题,这里是如何做到的:

  1. 转到设置 -> 编译器

  2. 全局编译器设置下转到编译器设置 -> 编译器标志

  3. 然后在 Warnings 部分下标记标记 将严格的 ISO C 和 ISO C++ 要求的警告视为错误

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多