我们需要一个extern来用C ++调用函数吗?

时间:2012-08-27 04:55:51

标签: c++

EXTERN(void) jpeg_fdct_8x4
JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));

在这里,我有四个问题:

  1. Extern(Void)的语法是什么意思?返回值无效?这是通常的语法吗?

  2. 我在第三方代码中看到非类成员函数,其中包含static关键字,inline关键字,no keyword和extern关键字。我知道static关键字将函数的范围限制在文件中。如果我使用“无关键字”会怎样?我是否必须在其他文件中使用extern才能使用该函数,或者在指定函数声明后我可以直接从另一个文件中调用该函数?

  3. 我是否只需要在C ++中使用extern来调用C语言接口?

  4. 内联函数的默认范围是什么?

2 个答案:

答案 0 :(得分:2)

EXTERN(n)是预处理程序定义,可在jmorecfg.h中找到:

  #define EXTERN(type)            extern type

所以上面的陈述扩展到

  extern void ...

对于C代码中的externcheck out this answer.

  
    

如果我使用“无关键字”会怎样?

  

在这种情况下,范围不受限制。非静态全局函数的名称在所有编译单元中对链接器可见,这意味着如果不同的模块使用相同的函数名称,则会出现名称冲突。

  
    

3)我是否只需要在C ++中使用extern来调用C接口?

  

你可能会引用extern "C" {}来指示编译器使用C调用约定。是的,您需要这个来从C ++调用外部C函数。

  
    

4)内联函数的默认范围是什么?

  

与未声明inline的范围相同。

答案 1 :(得分:0)

C ++是一种区分大小写的语言。 “extern”关键字与“EXTERN”不同。它似乎正在初始化一个void函数。 您可以使用其他源文件中的函数,而无需使用extern关键字。例如在编写项目时,IDE将始终使用main()函数开始调试和编译。您可以在不使用extern的情况下在其他文件中声明和调用函数。