以下说法错误的是( )。
A.C语言源程序编译的基本单位是函数
B.C语言的函数不能嵌套定义
C.C语言的函数可以嵌套调用
D.C语言的函数可以没有形参
a
基本单位是源文件
排除法
基于new bing部分指引作答:
以下说法错误的是(B.C语言的函数不能嵌套定义)。
实际上,C语言中的函数可以进行嵌套定义。也就是说,您可以在一个函数内部定义另一个函数。这些嵌套的函数可以具有自己的参数和局部变量,并且可以通过外部函数进行调用。嵌套函数的作用范围仅限于其所在的外部函数内部。
因此,选项B说法错误,其他三个选项(A、C和D)都是正确的。
BCD 都是正确的
首先,我们创建了三个文件:
然后我们通过gcc -o mytest f.c test.c
来生成可执行文件mytest
,接着我们再用objdump -S mytest
命令就可以跳转来查看此程序生成的符号表.如图:
在图中,可以看见,当C语言在编译过程生成符号表时,它的函数在符号表中的名字就只是用自定义的函数名来表示,所以,如果在C语言中写了函数重载,那么它会在符号表中生成两个名字一模一样的函数名,那这样,在链接的过程中它的符号表中会有两个完全一样的函数名,那编译器怎么知道要去找哪个呢?
所以,这个时候就发生了错误.这也就是C语言不能支持重载的原因.