ページ 1 / 1
#defineについて
Posted: 2016年8月09日(火) 20:04
by おーばー
#define A (10)と#define A 10に違いはありますか?
これまで手に取ってきた数少ない技術書の著者がすべて同じで,最近読んでいる著者とは違い#define時にが()あり
何か意味があってこうしているのかな,と疑問に思い質問させていただきました
やはり著者が違うので,人によってつける,つけないが分かれていて 特にこれといった意味はないですか?
Re: #defineについて
Posted: 2016年8月09日(火) 20:06
by おーばー
おーばー さんが書きました:#define A (10)と#define A 10に違いはありますか?
これまで手に取ってきた数少ない技術書の著者がすべて同じで,最近読んでいる "本の" 著者とは違い#define時にが()あり
抜けがありましたm(__)m
Re: #defineについて
Posted: 2016年8月09日(火) 20:43
by みけCAT
マクロの置換先にカッコが入るかどうかの違いがあります。
例えば、
と関数内に書いたとき、Aの定義が
ならコンパイルエラーにならずにputchar関数が実行されるでしょうが、
ならコンパイルエラーになるでしょう。
Re: #defineについて
Posted: 2016年8月09日(火) 21:35
by おーばー
なるほど!
逆にデメリットなどはありますか?
Re: #defineについて
Posted: 2016年8月09日(火) 23:09
by box
カッコが付いてないときのデメリットは感じたことがあります。
しかし、カッコが付いているときのデメリットは感じたことがありません。自分は。
ただ、識者のかたがたには、カッコが付いていてもデメリットがあるぞ!というかたがいらっしゃるかもしれません。
その場合は、具体例を挙げてこんなデメリットがあるぞ!と説明してくださることでしょう。
Re: #defineについて
Posted: 2016年8月10日(水) 01:02
by box
こんな例が適切かどうかはわかりませんが…。
カッコのあるなし(付け方含む)で結果がどういう風に違うか、よかったら確認してみてください。
意図としてはどれも 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について
Posted: 2016年8月11日(木) 00:13
by おーばー
返信遅れて申し訳ないです
自らで実行することで,体験することで理解できるような形をとってくださってありがとうございます!