• ベストアンサー

C言語の#defineについて

初歩的なことですみませんが、 #define命令はソースのどこに記述しても問題ありませんか? 一応、コンパイル時には問題ないようですが。 また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか? どなたか教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> #define命令はソースのどこに記述しても問題ありませんか? ある程度制限はあります。 まず、1論理行(行末に\があれば連結した上での1行)に記述できる前処理指令はひとつだけです。 次に、論理行において#の前に空白類(コメントを含む)以外があってはなりません。 #ifなども同様です。 > また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか? #if, #ifdef, #ifndef, #else, #elif, #endifは、#ifと#endifが対応していなければならないなどの制約もあります。 いきなり、#elifや#endifを書くことはできません。 なお、#elseifというのは分かりません。

TCD725c
質問者

お礼

回答ありがとうございます。 少し制限があることが分かりました。 ということは、関数内に書いたり命令の直後に書いても動作上は問題ないと言うことですか? ............. #define kazu 200 if(!(.....)) printf("kazu\n"); #define kazu 100 printf("kazu"); .............. (...は省略の意味) このような記述は危険ではないのでしょうか?

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

どこに書いても「本当の(というか狭義の) コンパイラ」には見えない (と思っていい) ので特に問題ないのですが.... でも, #define kazu 100 printf("kazu"); とやったところで「100」と表示されるわけじゃないってのは理解できてますよね?

TCD725c
質問者

お礼

回答ありがとうございました。参考になりました。 >「100」と表示されるわけじゃないってのは理解できてますよね? 確かに表示されないのは分かっていたのですが...勘違いしていました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> このような記述は危険ではないのでしょうか? 問題ありません。

TCD725c
質問者

お礼

回答ありがとうございます。解決しました。

関連するQ&A