Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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+中的外部函数+;_C++_Extern - Fatal编程技术网

C++ C+中的外部函数+;

C++ C+中的外部函数+;,c++,extern,C++,Extern,在cpp文件中对函数进行外部化时,编译器是否会对这些函数进行不同的处理 extern void foo(char * dataPtr); void foo(char *); extern void foo(char * ); 我想知道,因为我已经看到了所有这些代码,而不知道区别是什么。 ExtXN/COD>是C++函数的默认链接。这三个声明之间没有区别。没有。它们都是相同的函数。只有一个函数,即具有此签名: void foo(char *); 有没有关键字extern,其他两个的存

在cpp文件中对函数进行外部化时,编译器是否会对这些函数进行不同的处理

extern void foo(char * dataPtr);  
void foo(char *);
extern void foo(char * );  

我想知道,因为我已经看到了所有这些代码,而不知道区别是什么。

<代码> ExtXN/COD>是C++函数的默认链接。这三个声明之间没有区别。

没有。它们都是相同的函数。只有一个函数,即具有此签名:

void foo(char *);
有没有关键字
extern
,其他两个的存在没有任何区别,因为默认情况下函数名具有外部链接。

逐案:

 extern void foo(char * dataPtr);  
默认情况下,函数具有外部链接,因此不需要外部链接-这相当于:

 void foo(char * dataPtr);
 void foo(char * );  
参数名称在函数声明中不重要,因此上述内容相当于:

 void foo(char * dataPtr);
 void foo(char * );  

选择你最喜欢的。不,它们是一样的。所有函数声明都是外部的。extern关键字表示“我想让您知道这个存在,但我不是在这里定义它。”对于int,这是必要的,因为声明也是一个定义。对于函数,末尾的分号显式地将其标记为此处未定义

关于他们为什么将其标记为extern,我的最佳猜测可能是因为函数声明在头文件中,但定义不在通常预期的相应c文件中。这类似于extern通常在int类型上使用的方式(您希望声明它,但计划从其他源链接它),因此它是一种文档形式

这对我来说是链接的最好解释:

这可能会有所帮助