C从同名的不同文件执行函数

C从同名的不同文件执行函数,c,C,我有3个AI文件具有相同的“决策(游戏)”功能 在运行游戏的主文件中: 在C++中,这很简单,因为我刚才使用了命名空间< /p> namespace AI_A { #include "AI_A.cpp" } namespace AI_B { #include "AI_B.cpp" } namespace AI_C { #include "AI_C.cpp" } 在比赛中我做到了 if(turn == 0) { AI_A:decideAction(game); } etc

我有3个AI文件具有相同的“决策(游戏)”功能

在运行游戏的主文件中:

在C++中,这很简单,因为我刚才使用了命名空间< /p>
namespace AI_A {
    #include "AI_A.cpp"
}
namespace AI_B {
    #include "AI_B.cpp"
}
namespace AI_C {
    #include "AI_C.cpp"
}
在比赛中我做到了

if(turn == 0) { AI_A:decideAction(game); } etc....
有没有办法让我为C做这个?因为C没有名称空间或类

每个AI文件本身都有很多函数和一个decideAction函数,因此我不能只包含所有AI文件并重命名decideAction,因为两个不同的AI文件可能具有相同的函数名/全局变量


谢谢

在C中不能包含这样的文件。在C中“#include”意味着简单的文件插入,并且是在预处理器级别上完成的(就像以#开头的所有操作),因此它显然不能依赖于任何运行时(如turn值)

但是,这并不是什么大问题,因为您仍然可以以多种方式同时使用所有3个文件中的函数。大多数系统的工作方式是在名称中添加预处理器机制来操作它们。 请阅读以下内容:

我在预处理器级别看到的快速修复方法是简单地使用预处理器来欺骗名称,其工作原理类似于简单的查找和替换:

#include "AI_A.cpp"
#define decideAction AI_AdecideAction
...
#include "AI_B.cpp"
#define decideAction AI_BdecideAction

另外,不要忘记标题(如果有的话)并注意所有冲突,它会起作用。

包括实现(
.cpp
)文件是一个非常糟糕的主意。您不应该包含定义(在C++中有点复杂)。并且名称空间应该在头文件中。C有很好的名称空间,只是没有用户定义的名称空间。他们是不同的语言。Siad说:重新考虑项目结构,它看起来很混乱。一种选择是使用函数指针表。@kaylum-我认为所有函数的签名都必须不同才能使用函数指针表。在上述问题中,所有函数签名都是相同的,但在不同的文件中。这还可能吗?谢谢。@Nguaial“我认为所有函数的签名都必须不同才能使用函数指针表”。不知道你是从哪里得到这个想法的。@Nguaial啊,那是另一个问题。当然有办法做到这一点,但哪种方法最好/合适取决于OP的全部要求。一种方法是每个实现都有一个初始化或返回函数表的API。然后,主代码将为每个实现调用该API以获取其函数表。这是常用的基本插件模型。