0

我有四个文件 f1、f2、f3 和 f4,它们具有相同的函数名称和签名,但实现不同。

f1 : 
func1(int par1,int par2)

f2 : 
func1(int par1,int par2)


f3 : 
func1(int par1,int par2)

f4 : 
func1(int par1,int par2)

现在将根据某个版本 ID 调用每个函数,例如,如果版本 ID 为 1,我将调用文件 1 的 func1,如果它是 2,我将调用文件 2 的 func1。我该如何实现它!

我尝试创建另一个函数参数作为版本 ID,但随后我必须更改所有不可接受的函数签名。这必须在 C 中完成。如果它在 C++ 中,我可以创建一个类并且可以放置每个文件内容在一个新类中,然后创建每个类的实例,但它的纯 C.

或者有没有相同的#Pragma!

任何输入!

4

2 回答 2

5

你真的有两个不同的问题要在这里处理。

首先是函数都具有相同的名称这一事实,因此您无法明确地引用它们中的任何一个。要解决这个问题,您几乎可以肯定要将它们重命名为 func1、func2、func3 等。

然后你必须从1to call 的输入、to call的func2输入等等中获取。幸运的是,这很容易管理:2func2

// the type of a pointer to one of the functions:
typedef void func(int par1, int par2);

// an array of pointers to the functions:
func funcs[] = {func1, func2, func3, func4};

// call the correct function from the array, based on the ID:
funcs[ID]();
于 2013-04-30T05:41:09.187 回答
4

由于您没有任何操作系统,我能想到的唯一方法是分别编译和链接每个文件,并将它们也分别放在 ROM 映像中。然后从 ROM 映像中提取地址,并在表(或其他东西)中使用该地址并用于调用。


只是想到了另一种方法,那就是制作函数static。然后有一个独特的函数来获得一个你可以使用的函数指针结构。这是处理驱动程序的一种非常常见的方式。

于 2013-04-30T05:36:49.033 回答