1

我目前正在开发一个通用 C++ 库。好吧,我喜欢使用真实的函数名称,实际上我的项目有一个一致的函数命名系统。如果函数(或方法)不返回 bool,则函数(或方法)以动词
开头(在这种情况下,它们以 is_ 开头) 问题是这对某些程序员来说可能有些问题。考虑这个函数:

#include "something.h"
int calculate_geometric_mean(int* values)
{
//insert code here
}

我认为这样的函数似乎是正式的,所以我这样命名我的函数。但是我设计了一个简单的宏系统供用户切换函数名称。

#define SHORT_NAMES
#include "something.h"
#ifdef SHORT_NAMES
int calc_geometric_mean(int* values)
#else
int calculate_geometric_mean(int* values)
#endif
{
//some code
}

这比使用别名更明智(因为函数的每个别名都将在内存中分配),还是这个解决方案纯粹是邪恶的?

4

3 回答 3

4

FWIW,我不认为这种双重命名系统增加了很多价值。但是,它确实有可能引起很多混乱(委婉地说)。

无论如何,如果您确信这是一个好主意,我会通过内联函数而不是宏来实现它。

// something.h

int calculate_geometric_mean(int* values); // defined in the .cpp file

inline int calc_geo_mean(int* values) {
   return calculate_geometric_mean(values);
}
于 2013-01-30T22:07:43.910 回答
2

哪些符号将被导出到目标文件/库?如果您尝试使用其他版本怎么办?你会分发两个带有自己符号的二进制文件吗?

所以 - 不,坏主意。

于 2013-01-30T22:07:33.343 回答
0

通常,命名系统背后的目的是帮助代码的可读性和理解。

现在,您实际上有 2 个系统,每个系统都有一个基本原理。您已经迫使读者/维护者记住两种命名方法,这会削弱可读性的最终目标。不要介意最终污染代码库的丑陋#defines。

我会说选择一个系统并坚持下去,因为一致性是关键。我不会说这个解决方案本身就是纯粹的邪恶——我会说这不是一个开始的解决方案。

于 2013-01-30T22:24:18.767 回答