c在c++实践中的应用
c in c++ practices
我通常不会这么做,但我目前正在处理的项目需要c源文件中的几个函数。
extern "C" {
int words(char sentence[]);
int match(char str[], char sentence[], int n);
}
我只是想知道,将这些原型添加到c中的链接函数的最佳位置在哪里?
它应该添加到c++源文件(在我的例子中是command.cpp)还是添加到c/c++头?(command.h)
最不容易出错的方法是将声明放在共享的C&C++头文件,#ifdef
是仅由C++编译器使用的extern "C" {
(这是C中的语法错误):
#ifdef __cplusplus
extern "C" {
#endif
int words(char sentence[]);
int match(char str[], char sentence[], int n);
#ifdef __cplusplus
}
#endif
我个人也喜欢pre-#为无范围的extern
语法定义宏的变体:
#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++定义的__cplusplus
宏。因此,如果你的C翻译单元在file.c
中有实现,那么你会把标题file.h
写如下:
#ifndef H_FILE
#define H_FILE
#ifdef __cplusplus
extern "C" {
#endif
int words(char sentence[]);
int match(char str[], char sentence[], int n);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // include guard
现在,您可以在C和C++翻译单元中使用相同的标题。
因为它们是函数原型,所以声明与C++中的标准相同。您应该将它们添加到头文件中。除非我完全误解了你的问题。
我会将它们放在cpp文件中,与您通常放置正向声明的位置相同。如果在多个cpp文件中使用它们,请考虑标头。只有这样。
当然,在头文件中是一个加分项!但是ifdef应该用来避免多重定义。但在你的情况下,这不是问题所在。
相关文章:
- 在C应用程序中运行C++(带有STL)函数
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 我可以在 iOS 或 mac 应用程序中使用C++代码吗?
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 在实践中,在运行时为零的乘法中是否有任何"lazy"评估
- 使用本机 C++ 应用程序中的 C# 代码
- 如何在 Win32 C++控制台应用程序中调用 UWP 类库
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- 如何在实时应用程序中锁定线程
- 如何将独立的 c 应用程序组合到 c++ 应用程序中?
- C++检查应用程序中的文本框值
- 在 Flutter 应用程序中使用 Android NDK 中的 AssetManager 类
- 在安卓应用程序中使用.exe文件
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- C++库和自注册类:客户端应用程序中的工厂映射为空
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- c在c++实践中的应用