プロが教える店舗&オフィスのセキュリティ対策術

初歩的なことですみませんが、
#define命令はソースのどこに記述しても問題ありませんか?
一応、コンパイル時には問題ないようですが。

また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか?
どなたか教えていただけませんか?

A 回答 (3件)

> #define命令はソースのどこに記述しても問題ありませんか?



ある程度制限はあります。

まず、1論理行(行末に\があれば連結した上での1行)に記述できる前処理指令はひとつだけです。
次に、論理行において#の前に空白類(コメントを含む)以外があってはなりません。
#ifなども同様です。

> また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか?

#if, #ifdef, #ifndef, #else, #elif, #endifは、#ifと#endifが対応していなければならないなどの制約もあります。
いきなり、#elifや#endifを書くことはできません。
なお、#elseifというのは分かりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
少し制限があることが分かりました。

ということは、関数内に書いたり命令の直後に書いても動作上は問題ないと言うことですか?

.............
#define kazu 200
if(!(.....))
printf("kazu\n");
#define kazu 100
printf("kazu");
..............
(...は省略の意味)

このような記述は危険ではないのでしょうか?

お礼日時:2009/10/05 21:36

どこに書いても「本当の(というか狭義の) コンパイラ」には見えない (と思っていい) ので特に問題ないのですが....


でも,
#define kazu 100
printf("kazu");
とやったところで「100」と表示されるわけじゃないってのは理解できてますよね?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。参考になりました。

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

お礼日時:2009/10/06 00:24

> このような記述は危険ではないのでしょうか?



問題ありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/06 00:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています