作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我通常不会这样做,但我目前正在从事的项目需要几个位于 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 源文件中的函数。 extern "C" { int words(char sentence[]); int match(cha
我是一名优秀的程序员,十分优秀!