首页 > 解决方案 > 在标头中使用私有函数作为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& hg因为它更容易也更标准。所以我删除了这些函数并在标题上写了这个:

#define h(x)       f(x, 10, 10)
#define g(x, y)    f(x, y, 10)

问题是,如您所知,我必须f在标题中编写原型。f必须是私人的。有什么方法可以在这种情况下使用#define 吗?就像使用#def, #undef, ...

注意:随意更改主题

标签: cfunctionprototype

解决方案


那就不要使用宏了。

像这样做:


// 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
}

注意staticon的使用f。在没有f被声明的情况static下,它对您程序中的所有其他翻译单元都是可见的。如果你真的想隐藏它,你必须让它成为静态的。


推荐阅读