Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 定义两个具有相同标识符的函数,一个静态,另一个外部_C_Gcc_Linker_Ld - Fatal编程技术网

C 定义两个具有相同标识符的函数,一个静态,另一个外部

C 定义两个具有相同标识符的函数,一个静态,另一个外部,c,gcc,linker,ld,C,Gcc,Linker,Ld,在C语言中,我在两个不同的翻译单元中定义了两个具有相同标识符的函数。第一个翻译单元中的第一个函数用静态存储类说明符定义,另一个函数用外部定义。我想,我会从链接器中得到一个错误,但我没有。我有点困惑。为什么我没有从ld中得到错误 在第一个翻译单元中: static void func(void){ return; } int main(void){ func(); return EXIT_SUCCESS; } extern int func(int x){ return x;

在C语言中,我在两个不同的翻译单元中定义了两个具有相同标识符的函数。第一个翻译单元中的第一个函数用
静态
存储类说明符定义,另一个函数用
外部
定义。我想,我会从链接器中得到一个错误,但我没有。我有点困惑。为什么我没有从
ld
中得到错误

在第一个翻译单元中:

static void func(void){
  return;
}

int main(void){
  func();
  return EXIT_SUCCESS;
}
extern int func(int x){
  return x;
}
在第二翻译单元:

static void func(void){
  return;
}

int main(void){
  func();
  return EXIT_SUCCESS;
}
extern int func(int x){
  return x;
}

请提供一份报告。但一般来说,静态范围变量将隐藏全局外部,并且不是错误。使用
static
定义的符号不能出现在其TU之外。它不会与同名的其他静态符号冲突,也不会与未使用
static
@kaylum定义的函数冲突。我已经编辑了帖子,包括代码。谢谢你的回答,这很有道理。@JonathanLeffler我已经注意到了,我的问题是为什么会这样?我认为Kaylum make senseIt的回答是这样的,因为C标准说这是必需的行为。(对于我之前评论中的错误,我很抱歉:“似乎”应该被“看见”,而“不”应该是“也”。啊!我的借口是“遛狗时打手机”——这不是一个好借口,但是…)