0

メソッド(関数、ブロックなど)の(おそらくネストされた)スコープでこれを考慮してください。

int _ = 42;

という名前のローカル変数を避ける技術的な理由はあります_か?

この質問の目的のためのいくつかのガイダンス:

  • 私は_一般的に、Objective-C インスタンス変数のプレフィックスを知っています。それはさておき。コンベンションとの他の衝突についての解説は歓迎します。
  • 私もきれいなコードが好きですが、好みや純粋な意見 (たとえば、「{紛らわしい、読めない、保守できない}」など) の記述は、ここでは強くお勧めしません†。
  • 私は主に Objective-C についてこれに回答することに関心がありますが、C または C++ に関連する回答もお勧めします。

†私にパイントを買ってください。それについてすべて教えてください。:)

4

2 に答える 2

4

C99 §7.1.3 は、少なくとも 1 つのアンダースコアで始まるすべての識別子は、ファイル スコープ識別子のみとして、実装で使用するために予約されていると述べています。1 _は少なくとも 1 つのアンダースコアで始まる識別子であるため、ファイル スコープで定義することは想定されていません。2

ただし、ローカル変数名として_は、アプリケーション プログラマーにとって公正なゲームです。2 つのアンダースコア、またはアンダースコアと大文字のいずれかで始まる識別子のみが無条件に予約されます。

脚注が示すように、これらの規則は遵守よりも違反の場合に尊重されます。

1はい、つまり、「内部使用のみ」の関数名を_小文字で始めるという非常に一般的な慣行は、技術的には適合違反です。

2 GNU gettextは、このルールを破る著名なサードパーティ ライブラリです。プログラマーは#define _(x) gettext(x)速記として推奨されます。

于 2014-05-23T14:54:49.900 に答える