写了 15 行代码,编译报错竟然高达 1800 多行,这种奔溃的瞬间应该有很多同学遇到过。
代码分为两块,一个头文件,一个源文件。
test.h
#ifndef TEST_H #define TEST_H #includesize_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语言中应该是最简单的问题,现在的编译器足够智能,甚至能告诉你怎么修该。多写代码,遇到的多了,就能形成条件反射,看到问题,就能知道怎么修改。
全部0条评论
快来发表一下你的评论吧 !