c++ - c在c++实践中

标签 c++ c

我通常不会这样做,但我目前正在从事的项目需要几个位于 c 源文件中的函数。

extern "C" {
    int words(char sentence[]);
    int match(char str[], char sentence[], int n);
}

我只是想知道,将这些原型(prototype)添加到 c 中的链接函数的最佳位置在哪里?

它应该添加到 c++ 源文件(在我的例子中是 command.cpp),还是 c/c++ 头文件? (命令.h)

最佳答案

最不容易出错的方法是将声明放在一个共享的 C 和 C++ 头文件中,#ifdef extern "C"{ 只被使用由 C++ 编译器(这是 C 中的语法错误):

#ifdef __cplusplus
extern "C" {
#endif
  int words(char sentence[]);
  int match(char str[], char sentence[], int n);
#ifdef __cplusplus
}
#endif

我个人也喜欢为无作用域的 extern 语法预先#defining 宏的这种变体:

#ifdef __cplusplus
#define CFUN extern "C"
#else
#define CFUN
#endif

CFUN int words(char sentence[]);
CFUN int match(char str[], char sentence[], int n);

这使杂乱的#ifdef 内容保持本地化。您可以将它放在一个项目范围的头文件中,并在任何地方使用 CFUN 说明符。如果 CFUN 宏可能与现有定义发生冲突,您可能希望在其名称前加上前缀。

关于c++ - c在c++实践中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447774/

相关文章:

c++ - 在 Qt 中创建目录的哈希值

c++ - typeid 是如何工作的,对象又是如何存储类信息的?

c 程序使用 logn 时间复杂度查找升序数组中的重复元素

c - Hackerrank 中的 C 有什么不同(得到不同的输出)吗?

c - 当数字超过 9 个字符时,printf long 会更改变量

c++ - gcc:链接外部库

c++ - 重载 typedef 参数

c - 使用C扫描Linux中的所有文件

c++ - C/C++ : Converting hexadecimal value in char to integer

c++ - 如何在 Maya Api 中对齐顶点和法线?