【问题标题】:Alter function name using #define使用 #define 更改函数名称
【发布时间】:2014-12-15 20:12:00
【问题描述】:

我可以在 C 中实现这个吗?

#define X abc

那么X_menu();将被预处理为abc_menu();

在另一个版本中 如果我define X def 那么X_menu(); 将是def_menu();

我确定应该有一个方法,但我想不通。

【问题讨论】:

  • 如果用户可以这样做,那么标准库的内部细节需要命名为__l__i__k__e__t__h__i__s,我也想扼杀人们。实际上,即使那样也行不通……标准库不可能安全地实现。
  • 通常的约定是不要用预处理器玩这样的把戏。甚至不应使用 Ryan Haining 的(工作)答案:间接为读者增加了一个很大的减速带,并且打字的节省是最小的。如果您必须使用某种自动工具来快捷输入,请使用编辑缩写。学习触摸打字也有帮助。
  • 这个真的不懂。
  • @user1932637 我给你的东西有效,但实际使用是个坏主意
  • 你为什么认为这是个坏主意?

标签: c gcc c-preprocessor


【解决方案1】:

不,您不会想要这种行为,因为替换每个名称中的每个 X 会非常不安全且难以处理。但是,您可以使用宏函数来做类似的事情

#define X(F) abc##F
X(_menu();)

## 是宏连接,所以X(_menu();) 将扩展为abc_menu();

正如Roger 指出的那样,宏也可以使用语法

X(_menu)();

你可能会发现它更容易阅读

【讨论】:

  • X(_menu)(); 看起来更舒服,imo。
  • 哈,这很棘手。凉爽的!我唯一不喜欢的是你必须定义 X(F) 而不是 X。还有其他解决方案吗?
  • @user1932637 afaict,没有什么比这更好的了,同时仍然只使用预处理器,如果您开始自己生成代码,那么可能性是无限的
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多