【问题标题】:How to ensure my code is ansi C, no C++ involved. Could compiler like gcc can be set to prompt error when meeting feature in C++?如何确保我的代码是 ansi C,不涉及 C++。像gcc这样的编译器可以设置在C++中遇到特性时提示错误吗?
【发布时间】:2013-07-31 22:58:40
【问题描述】:

我用 C++ 编程了一段时间。 现在我想编写一个 ANSI C 程序,不希望代码中有任何“仅 C++”功能。 我正在使用安装了 gcc 的 cygwin 64 位。 如果遇到 C++ 功能,是否有任何设置让 gcc 提示编译器错误?例如。 stl。

提前谢谢你。

【问题讨论】:

  • 首先使用 C(而不是 C++)编译器进行编译。
  • 另外,GCC 和 clang 支持-Wall -Wextra -Werror -std=c89 -ansi -pedantic -pedantic-errors 标志。
  • 根据您的编译器标志,只需为源文件添加一个 .c 扩展名就足够了。
  • “ANSI C”到底是什么意思?该术语通常指的是(正式过时的)该语言的 1989/1990 版本,但 ANSI itself 目前仅识别 2011 标准。
  • 每个标准都基于前一个标准。除了少数例外,有效的 C90 代码也是有效的 C99 代码,有效的 C99 代码也是有效的 C11 代码。标准委员会相当谨慎地避免破坏旧代码。提供C99C11 的草稿;每个都有一个前言,总结了上一版的变化。

标签: c++ c gcc compiler-construction


【解决方案1】:

以下内容摘自gcc documentation

最初的 ANSI C 标准 (X3.159-1989) 于 1989 年获得批准,并且 1990年出版。该标准被批准为ISO标准 (ISO/IEC 9899:1990) 于 1990 年晚些时候。没有技术差异 在这些出版物之间,尽管 ANSI 标准的部分 被重新编号并成为 ISO 标准中的条款。这个标准, 在这两种形式中,通常称为 C89,或偶尔称为 C90, 自批准之日起。 ANSI 标准,但不是 ISO 标准,还附带了一个基本原理文件。选择这个标准 在 GCC 中,使用选项之一 -ansi、-std=c90 或 -std=iso9899:1990; 要获得标准要求的所有诊断,您应该 还指定 -pedantic (或 -pedantic-errors 如果您希望它们是 错误而不是警告)。

因此,使用以下标志进行编译:

gcc myfile.c -ansi -pedantic-errors

请注意 -ansi 和 -std=c90 是同义词。有关选项的完整列表,请参阅Options Controlling C Dialect

【讨论】:

  • 确保源文件名有.c 后缀,而不是.cpp 甚至.C
  • 或明确并使用-x c
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2014-01-16
相关资源
最近更新 更多