不要な詳細が含まれないように問題を抽象化しますが、必要に応じてソースコードを提供できます。VisualStudioを使用しています。
私は次のファイルを持っています-すべてのヘッダーファイルには一度#pragmaがあります:
- A.cpp //(私のメイン関数を含む)
- Bh
- B.cpp //(役割を果たしません)
- Ch
- C.cpp
そして、これがプリプロセッサコマンドの設定方法です。
A.cpp #defines UseOptionOne
A.cpp #includes B.h
B.h #ifdef UseOptionOne
#defines Func as f1() //(calling a function that prints a msg)
#else
#defines Func as [blank]
A.cpp #includes C.h
C.h #includes B.h // (B.h have #pragma once, so it doesnt get included again)
関数呼び出しの設定方法は次のとおりです。
A.cpp main function uses Func //- It prints as intended
A.cpp calls function in C.cpp // this function does the following:
{
#ifndef UseOptionOne
exit(0) //- Doesn't happen, so UseOptionOne is defined
#endif
uses Func //- DOES NOTHING?????
}
A.cpp uses Func //- It prints as intended
これがどのように可能かわかりませんか?UseOptionOneはChでまだ定義されていることが確認されていますが、Funcは別の方法で定義されていますか?
誰かがこれを説明できますか?それとも、私のかなり複雑なソリューションやいくつかのコードフラグメントを提供してほしいですか?
私は本当に迷っています:(
編集:C.cpp関数が呼び出されたことを確認するためにブレークポイントを使用しましたが、「Func」は単に空白として扱われます
EDIT2:評判が悪いため、自分の質問に答えることができないので、ここに入れます:抽象的な説明を実装する新しいプロジェクトを作成しました
が
、#ifndefで終了がトリガーされました。
この説明で問題を解決します。もう一度すべてを調べて、間違い/エラーを見つける必要があります。