c - 在标头中使用私有函数作为c中的#define
问题描述
我有一个功能f
是:
void f(int x, int y, int z){
//bla bla bla
}
以及其他一些使用的功能f
:
void g(int x, int y, int z){
f(x, 10, 10); //10, 10 are hard coded
}
void h(int x, int y){
f(x, y, 20); //20 is hard coded
}
重要提示: f
必须保持私密并对其他文件隐藏。
现在,在头文件中,我只h
写了和的原型g
。一切都好。
我决定使用#define
& h
,g
因为它更容易也更标准。所以我删除了这些函数并在标题上写了这个:
#define h(x) f(x, 10, 10)
#define g(x, y) f(x, y, 10)
问题是,如您所知,我必须f
在标题中编写原型。f
必须是私人的。有什么方法可以在这种情况下使用#define 吗?就像使用#def
, #undef
, ...
解决方案
那就不要使用宏了。
像这样做:
// header.h
void g(int x, int y, int z);
void h(int x, int y);
// implementation.c
#include "header.h"
static void f(int x, int y, int z){
//bla bla bla
}
void g(int x, int y, int z){
f(x, 10, 10); //10, 10 are hard coded
}
void h(int x, int y){
f(x, y, 20); //20 is hard coded
}
注意static
on的使用f
。在没有f
被声明的情况static
下,它对您程序中的所有其他翻译单元都是可见的。如果你真的想隐藏它,你必须让它成为静态的。
推荐阅读
- android - 删除文本不会保存到 SQLite 数据库
- linux - 在 bash 脚本中用下划线替换连字符
- c++ - 如何删除约束集的子集并使用 c++/cplex 向该集添加新约束?
- python - pandas.Series 方法返回更新的系列
- google-cloud-platform - 谷歌云路由器上的 BGP 过滤
- vuejs2 - 使用 Nuxt.js 在 Vuex 中预取 api 数据
- python - 制表不同复选框中的复选框 - Tkinter
- android - 如何从 Android 应用程序向 NodeJS 服务器上的观察者提供 FirebaseInstanceID 令牌?
- web-applications - What is the correct way to store specific (one off) data and information, permanently in a web-application?
- python - 得到错误 IndexError: ('list index out of range', u'occured at index 193')