【发布时间】:2019-02-24 11:18:57
【问题描述】:
我正在尝试找出 C(11) 中的最佳实践。因为没有命名空间,所以我可以想到两种避免名称冲突的方法:
a.) 函数前缀
void kernel_init(void) { ... }
int kernel_start(void* foo) { ... }
b.) “函数结构”
struct kernel {
void (*init)(void);
int (*start)(void* foo);
} kernel;
我不是在问哪种方法更漂亮,因为那是相当主观的。我要问的是除了代码风格之外,这两种方法有什么明显的缺点吗?这包括一开始不相关但随着代码库增长而成为更大问题的小事情。
【问题讨论】:
-
如何命名要分配给结构成员的函数?
-
@Gerhardh 好点!由于它们仅在源文件中可见,因此并不重要(但我会使用前缀)
-
用结构体处理函数的另一个问题是编译器不能再内联这些函数了!
-
第二种方式在C中常用来实现动态调度(相当于C++中的虚方法)。但是额外的开销通常会阻碍它在任何其他情况下的使用。