避免_作为局部变量名的技术原因

Objective-C: technical reasons to avoid _ as a local variable name?

本文关键字:技术 变量名 局部 避免      更新时间:2023-10-16

在方法(函数、块等)的(可能嵌套的)作用域中考虑:

int _ = 42;

是否有任何技术原因避免名为_的局部变量?

一些指导,对于这个问题的目的:

    我知道_通常前缀Objective-C实例变量。先把这个放在一边。欢迎评论其他与公约的冲突
  • 我也喜欢漂亮的代码,但是品味或纯粹观点的陈述(例如:"这是{令人困惑的,不可读的,不可维护的}")强烈建议在这里†。
  • 我主要感兴趣的是为Objective-C回答这个问题,但答案
请我喝一杯,然后你可以告诉我一切。:)

C99§7.1.3规定,所有以至少一个下划线开头的标识符都保留供实现使用,仅作为文件范围标识符。1 _是一个至少以一个下划线开头的标识符,所以你不应该在文件范围内以任何方式定义它。2

然而,作为本地变量名,_对应用程序程序员来说是公平的。只有以两个下划线开头的标识符,或者下划线和大写字母开头的标识符才被无条件保留。

如脚注所示,违反这些规则比遵守这些规则更受尊重。

1是的,这意味着非常常见的以_后跟小写字母开始"仅内部使用"函数名的做法在技术上是违反一致性的。

2 GNU gettext是一个杰出的第三方库,它打破了这一规则;建议程序员使用#define _(x) gettext(x)作为简写

简单地回答你的问题——不,没有任何技术理由来避免它。还有很多其他的原因