如何在cmd.exe中创建GCC显示所有错误

时间:2015-09-15 11:37:42

标签: c gcc cmd

我一直在windows cmd中使用gcc来编译我的c代码。

这是我正常工作的cmd命令:

gcc test.c -o myprogram

当存在多个错误时,例如此代码:

#include <stdio.h>
#include <foo.h>
int main()
{
    printf("bar")
}

只显示这一个错误

error.c:2:19: fatal error: foo.h: No such file or directory

编译终止。

而不是3个错误:

  1. no&#34; foo.h&#34;头文件
  2. printf(&#34; bar&#34;)没有分号
  3. 没有int main
  4. 的返回值

    如何改进cmd命令以使gcc显示所有错误?

1 个答案:

答案 0 :(得分:2)

在你的案例中调用gcc的更好的命令是

  gcc -Wall -Wextra -g test.c -o myprogram

它要求[几乎]所有警告,一些额外警告和调试信息(使用gdb

但是,GCC(或任何合理的编译器)对丢失的包含文件无能为力(因为丢失的文件可能会定义编译其余代码所需的大量名称)。

详细了解C preprocessor,即cpp ...

想象一下,foo.h包含#define printf(...)(这不是一个好主意,因为编码为#define printf(...) do{}while(0)可能是better - 但不是很多,因为printf(3)返回一个整数 - 并且会发现你的错误#2),那么你的代码就是正确的。

顺便说一句,你可能应该改善你的习惯并经常(例如每隔几分钟)编译你的源代码。此外,使用像git这样的版本控制系统,每天多次提交源代码(编译时)。

如果你使用一个好的编辑器(例如GNU emacs),你可以通过一次按键轻松配置它来构建你的项目(例如,运行make)到 M-x compile 。对于一个小项目(少于10万行C源代码),适当地组织在几个 translation units中,并使用像GNU make这样的良好构建器,逐步重新编译 最多只需要几秒钟,你可以负担得起。

关于return中缺少main(特别是main)(您的错误#3),这(奇怪地)符合C11标准§5.1.2.2 .3(n1570):

  

到达终止该{。}的}   main函数返回值0