C ++中长短函数名称的宏

时间:2013-01-30 22:03:10

标签: c++ macros alias naming

我目前正在开发一个通用的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
}

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:2)

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

所以 - 不,不好主意。

答案 2 :(得分:0)

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

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

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