【问题标题】:A macro for long and short function names in C++C++ 中长短函数名的宏
【发布时间】:2013-01-30 22:03:09
【问题描述】:

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

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

【问题讨论】:

  • 它本身并没有什么坏处,但我认为从函数名中删除五个字母并没有增加足够的价值来克服拥有两个独立 API 的缺点。
  • "is" 实际上是一个动词。
  • 我喜欢你对自己写的东西是否邪恶持谨慎态度。我希望有更多像你这样的人。
  • 我倾向于删除所有的元音。我不喜欢里面有元音的代码。
  • @juanchopanza,恰恰相反。它应该只有元音。

标签: c++ macros alias naming


【解决方案1】:

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);
}

【讨论】:

    【解决方案2】:

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

    所以 - 不,这是个坏主意。

    【讨论】:

    • 是的,您对静态库和 dll 是正确的;但我想将此系统用于仅在头文件中定义的功能。因此,无需符号即可使用这些功能。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多