2011-06-02 83 views
7

当在cpp文件中外部函数时,编译器是否对待它们的方式不同?C++中的外部函数

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

我不知道,因为我看到所有这些代码和不知道有什么区别。

+1

这可能帮助http://msdn.microsoft.com/en-us/library/0603949d(v=vs.80)。 ASPX – Terrance 2011-06-02 18:39:24

回答

9

逐案:

extern void foo(char * dataPtr); 

功能默认情况下具有外部链接,所以EXTERN是没有必要的 - 这相当于:

void foo(char * dataPtr); 

参数名无法在函数声明显著,所以上面相当于:

void foo(char *); 

使用无论你觉得happi与...一起。

1

extern是C++函数的默认链接。这三个声明没有区别。

2

不,它们都是相同的功能。只有一个功能,即与此签名:

void foo(char *); 

另外两个的存在没有什么区别,有或没有关键字extern,如函数名都默认外部链接。

1

不,他们是一样的。所有的函数声明都是外部的。 extern关键字说:“我想让你知道这存在,但我没有在这里定义它。”用int来说,这是必要的,因为声明也是一个定义。使用函数时,最后的分号明确标记为未在此处定义。

我最好的猜测,为什么他们标记为extern可能是因为函数声明在头文件中,但定义不在通常所期望的相应的c文件中。这与extern通常用于int类型的方式类似(您想声明它,但您打算将其链接到其他来源中)。所以它是一种文档形式。

这是联动的,以我最好的解释:

http://publications.gbdirect.co.uk/c_book/chapter4/linkage.html