15行代码引发1800多行编译错误:问题排查挑战

描述

写了 15 行代码,编译报错竟然高达 1800 多行,这种奔溃的瞬间应该有很多同学遇到过。

代码分为两块,一个头文件,一个源文件。

test.h

#ifndef TEST_H
#define TEST_H

#include 

size_t length(const char *s)


#endif

test.c

#include "test.h"
#include 
#include 
#include 
#include 


int main()
{
    printf("%d
", length("aa"));
}


size_t length(const char *s) 
{
    return strlen(s);
}

开始编译,当敲下回车的那一刻,瞬间有点上头,编译报错已经超出了终端的范围,一直往上翻到头也没找到编译的命令。

我尝试把错误定向到文件中,看了一下,有 1800 多行。

难怪很多初学者只需要半天时间从入门到放弃,这么多错误,根本无从下手。

先来大概分析下,提示的这些错误基本都是标准头文件里面的错误,比如 stdio.h,很显然,这是不可能的。

/usr/include/stdio.h:911:14: error: storage class specified for parameter ‘ctermid’
  911 | extern char *ctermid (char *__s) __THROW
      |

这个问题,一定是跟头文件有关,而且大概率是你写的头文件,影响了别人的头文件,比如函数声明的后面少了分号。

当 test.h 被展开的时候,由于函数声明后面没有加分号,导致其他被展开的头文件都不合符语法要求,头文件包含的越多,报错也就越多。如果这个时候真的去标准头文件里面找问题,基本就废了。

编译问题在C语言中应该是最简单的问题,现在的编译器足够智能,甚至能告诉你怎么修该。多写代码,遇到的多了,就能形成条件反射,看到问题,就能知道怎么修改。
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分