C++ C+中的外部函数+;
在cpp文件中对函数进行外部化时,编译器是否会对这些函数进行不同的处理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,其他两个的存
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类型上使用的方式(您希望声明它,但计划从其他源链接它),因此它是一种文档形式 这对我来说是链接的最好解释: 这可能会有所帮助