相关疑难解决方法(0)

80
推荐指数
7
解决办法
3万
查看次数

清理代码的最佳命令行工具是什么?

当我编写C代码时,我只使用编辑器和gcc.我想知道是否有人可以建议一个好的和简单的工具,将找到未使用的变量,函数声明,并可能进行一些优化.

有人知道一个好工具吗?

c

31
推荐指数
4
解决办法
1万
查看次数

严格的C90代码的GCC选项?

我试图找到在测试严格的 C90一致性时使用的gcc标志的组合.根据以前的帖子:最严格的C代码的GCC选项?,我应该只需要--std = c90.

不过这是我试过的:

$ cat t.c
#include <stdint.h> /* added in C99 */

int main()
{
  uint64_t t;
  return 0;
}
$ gcc -std=c90 -ansi -pedantic   t.c
Run Code Online (Sandbox Code Playgroud)

以上确实运作良好(没有产生警告/错误).

有谁知道:

  1. gcc标志具有严格的ISO/IEC 9899:1990一致性
  2. 一个不同的编译器(tcc,clang ...)有不同的标志集?

编辑:

对不起,我的措辞,是的,我真的想模仿一个严格符合C90的编译器,换句话说,如果代码试图使用以后添加的任何功能(C99会浮现在脑海中),它应该会失败.所以pthread包含头应当在GNU/GCC调用C90模式时编译时发出警告(就像stdint.h头应该产生没有C99的警告).-pedantic很好地警告我使用long long,我不明白为什么它不应该警告我uint64_t.

我使用ISO/IEC 9899:1990的术语引用自:

1990年,ANSI C标准(格式化改变)被国际标准化组织(ISO)采用为ISO/IEC 9899:1990,有时称为C90.因此,术语"C89"和"C90"指的是相同的编程语言.

EDIT2:

GCC文档实际上非常清楚:

作为C99标准的一部分的一些功能在C90模式中被接受为扩展,并且作为C11标准的一部分的一些功能在C90和C99模式中被接受为扩展.

所以我的问题被重新定义为:

  • linux系统上是否有编译器+标准include头,它严格符合C90?

c gcc iso c89

13
推荐指数
2
解决办法
3128
查看次数

标签 统计

c ×3

gcc ×2

c89 ×1

compiler-errors ×1

iso ×1