4

誰が何をするのか説明できますか

#define something (54)

平均?54 が括弧の中にあるのはなぜですか?

4

7 に答える 7

4

#define something (54)コードが実際にコンパイルされる前に、「something」に一致するテキストを「(54)」に置き換えるように C プリプロセッサに指示します。

( )a の前後での使用がよく見られる理由は、場合によっては、テキストがより大きな式に置き換えられた#defineときに、置き換えられたテキストが不利なまたは未定義の動作をするのを防ぐためです。#definedこのような悪影響は、演算子の優先順位の変更などである可能性があります。

于 2012-07-17T03:19:27.783 に答える
4

一般に、#define ステートメントを括弧内に入れることをお勧めします。これは良い習慣であり、ほとんどの日常的なプログラマーは良い習慣を守っています。

例えば:

#define TWO_PLUS_ONE    2 + 1

このように使用すると:

3 * TWO_PLUS_ONE

答えは 9 になると思いますが、演算子の優先順位により、計算された答えは 7 になります。 htm )。これが、C++ プログラマーが「マクロは悪だ!」と叫ぶ理由です。しかし、私たちは C プログラマーであり、エリートであり、怖くはありません。

同じ例:

#define TWO_PLUS_ONE    (2 + 1)

これにより、すべての状況で期待される結果が得られます。

ほとんどのプログラマーは、覚えやすく、実践しやすく、実行しやすいように、自分のプラクティスをあらゆる状況に適用したいと考えています。したがって、単純なケースでは

#define SOMETHING    (54)

早くやれよ。それは良いアイデアです。チームの一員になることを学びましょう。彼らはあなたを助けようとしています。ところで、次に彼らは「本当は (54u) のはずだ」と言います。

于 2012-07-17T03:28:41.340 に答える
1

なぜこれを使うのか

#define SOMETHING    (54)

これの代わりに

const int SOMETHING = 54;

それに対する答えが何かはわかりません -- この種の の使用は#defineやや古風かもしれません。とはいえ、括弧の使用は便利です。これにより、2 種類の宣言が基本的に同じように動作するからです。したがって、値を微調整したい場合は...

#define SOMETHING (54+1)

また

const int SOMETHING = 54+1;

...それらは一般的に「マニフェスト定数」と同等です。括弧がないと、式が評価される前#defineに単純な置換を使用して適用されるため、それらは同等ではありません。

したがって、#define値がそのように適用される場合...

int a = 2*SOMETHING;

...宣言で括弧が使用されているかどうかによって、異なる結果が得られます。

int a = 2*54+1; // no parentheses -- answer is 109
int a = 2*(54+1); // parentheses -- answer is 110

もちろん、あなたの例のように、割り当てられた値が単純な定数である限り、括弧の存在はコンパイラに違いはありません。 これは、このコードを書いている人、または将来このコードを変更する可能性のある人のためだけのものです。 この形式の宣言を一貫して適用することにより、作成者はヒューマン エラーの発生を削減しようとしています。

于 2012-10-04T03:13:31.640 に答える
1

括弧は不要です。(54)と意味的に異なるシナリオは想像できません54。私が間違っていたら...見せてください。私は何か新しいことを学んだでしょう。

于 2012-07-17T03:07:49.813 に答える
1

その場合の括弧は無視されます。それは書くことと同じです:

#define something 54

それらは、次のような数学であなたが好きになるのを助けるだけです:

#define something (54-2)/2

とは異なります

#define someotherthing 54-2/2
于 2012-07-17T03:07:58.377 に答える
0

"()" は括弧であり、[括弧] ではありません。これは基本的にノーオペレーションです。54 が有効な場合はいつでも、(50+4) が有効であるように (54) も有効であり、(27*2) またはその他の式も有効です。

表示されているこの「品質基準」エラーについて詳しく教えていただけないでしょうか? 括弧は不要なので、気に入らない人もいるでしょう。

于 2012-07-17T03:07:00.440 に答える
0

おそらく、将来の変更を容易にするためにこのように書かれています。orに変更54することを検討してください -- かっこを使用すると、それ以上考えずに直接変更できます。括弧なしで変更が行われた場合、 program で使用されるすべての場所で演算子評価の優先順位が重要になります。1024*541024+54something

于 2012-07-17T03:20:55.990 に答える