我经常会把一组相关的全局函数和变量封装在一个结构体中,以创建一个类似于它们的“命名空间”,例如:
extern struct foo_namespace {
int (* const foo)(int a);
int (* const bar)(void);
const int a;
const int b;
int x;
int y;
} foo;
然后将其与一个设置函数和常量的
.c
文件链接起来。这样,我就可以创建全局名称而不必担心命名空间中的内容以及稍后会出现什么情况,非常干净和方便。
然而,我确实担心它通过要求通过指针调用函数来引入一小部分代码的低效性,可能还有其他问题。
无论是程序设计、速度、可执行文件大小还是其他任何问题,对于以这种方式分组全局变量的所有潜在问题和低效性都有哪些?
编辑: 我刚刚运行了一个带有结构体中空函数和常规函数的循环。当没有应用优化时,结构体中的函数更快(20秒对26秒)。经过优化后,全局函数被完全优化掉,速度更快。看来除非函数可以内联,否则速度上并不重要。
#define ns(namespace, object) namespace##_##object
将对象名称前缀与命名空间和下划线一起,而无需在运行时进行任何操作。 - Frankie_C