#defineについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
おーばー

#defineについて

#1

投稿記事 by おーばー » 7年前

#define A (10)と#define A 10に違いはありますか?

これまで手に取ってきた数少ない技術書の著者がすべて同じで,最近読んでいる著者とは違い#define時にが()あり
何か意味があってこうしているのかな,と疑問に思い質問させていただきました
やはり著者が違うので,人によってつける,つけないが分かれていて 特にこれといった意味はないですか?

おーばー

Re: #defineについて

#2

投稿記事 by おーばー » 7年前

おーばー さんが書きました:#define A (10)と#define A 10に違いはありますか?

これまで手に取ってきた数少ない技術書の著者がすべて同じで,最近読んでいる "本の" 著者とは違い#define時にが()あり

抜けがありましたm(__)m

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: #defineについて

#3

投稿記事 by みけCAT » 7年前

マクロの置換先にカッコが入るかどうかの違いがあります。
例えば、

コード:

putchar A;
と関数内に書いたとき、Aの定義が

コード:

#define A (10)
ならコンパイルエラーにならずにputchar関数が実行されるでしょうが、

コード:

#define A 10
ならコンパイルエラーになるでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

おーばー

Re: #defineについて

#4

投稿記事 by おーばー » 7年前

なるほど!
逆にデメリットなどはありますか?

box
記事: 2002
登録日時: 13年前

Re: #defineについて

#5

投稿記事 by box » 7年前

カッコが付いてないときのデメリットは感じたことがあります。
しかし、カッコが付いているときのデメリットは感じたことがありません。自分は。
ただ、識者のかたがたには、カッコが付いていてもデメリットがあるぞ!というかたがいらっしゃるかもしれません。
その場合は、具体例を挙げてこんなデメリットがあるぞ!と説明してくださることでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: #defineについて

#6

投稿記事 by box » 7年前

こんな例が適切かどうかはわかりませんが…。
カッコのあるなし(付け方含む)で結果がどういう風に違うか、よかったら確認してみてください。
意図としてはどれも 3 * 3 = 9 という計算をしたいんだけど、さて結果は?

コード:

#include <stdio.h>

#define A 1 + 2
#define B (1 + 2)
#define C (1) + (2)
#define D ((1) + (2))

int main(void)
{
    printf("%d\n", A * A);
    printf("%d\n", B * B);
    printf("%d\n", C * C);
    printf("%d\n", D * D);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

おーばー

Re: #defineについて

#7

投稿記事 by おーばー » 7年前

返信遅れて申し訳ないです
自らで実行することで,体験することで理解できるような形をとってくださってありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る