c++ - 我们需要 extern 来调用 C++ 中的函数吗?

标签 c++

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

在这里,我有四个问题:

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

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

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

  4. 内联函数的默认范围是多少?

最佳答案

EXTERN(n)是一个预处理器定义,可以在 jmorecfg.h 中找到:

  #define EXTERN(type)            extern type

所以上面的语句扩展为

  extern void ...

关于 extern 的文章在 C 代码中,check out this answer.

What happens if I use "no keyword"?

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

3) Do I need extern in C++ only to call interface with C?

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

4) What is the default scope of inline functions?

与未声明的范围相同 inline

关于c++ - 我们需要 extern 来调用 C++ 中的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136417/

相关文章:

c++ - 如何将可变长度字符串从 RPC 服务器传递到客户端?

c++ - 递归地使用单个函数显示具有最小值和最大值的三角形

c++ - 如何处理 Windows 上 .pro 文件中不同的库名称?

c++ - "++"和 "+= 1 "运算符有什么区别?

c++ - 模板化函数和类中的 T&&

c++ - 为什么这个 boost::variant 示例不起作用?

c++ - 使用 XNAMATH 优化堆栈分配的对象

c++ - Qt C++ - 删除 QTableWidget 中的行

c++ - Qt 和 C-Lion 对 `WinMain@16' 的 undefined reference

c++ - 将 `std::floor()` 和 `std::ceil()` 转换为整数类型是否总是给出正确的结果?