#define内の#ifdef


83

私はこのようなものを書き込もうとしています:

COV_ONこのように定義する方法はありますか?#ifdef#defineの内部に入れることができないので、上記で行ったことは間違っていることを知っています。(#で許可されている文字ではありません#define)。それで、解決策はありますか?


1
ここでのすべての回答はdo {} while(0)、空のステートメントを避けるために(または同等の)使用を省略しているようです。リンクされた複製に関する私の答えを
Roger Lipscombe 2018

回答:


89

ありえない。逆に行います。


21

単にそれを好転させる:


お返事をありがとうございます。COV_ON(on)とCOV_ON(off)を試しましたが、エラー:expected ')'、nearoffというエラーが表示されます。問題についての考え。
agent.smith 2011

それらは文字列です。引用符内で通常の文字列として使用する必要がありますか?「オン」と「オフ」のように。
agent.smith 2011

COVERAGEの定義にもよりますが、引用する必要があると思います。この新しい問題について別の質問を開くことをお勧めします。
フィリップ

引用符で試しましたが、役に立ちませんでした。私はすでに新しいスレッドを開いています。_Pragmaの構文が間違っていると思われる場合はお知らせください。
agent.smith 2011

14

これは古い質問ですが、最新の回答が必要でした。

マクロ内でインラインifdefを使用する代わりに__VA_ARGS__、同じことを行うようにマクロを選択的に定義できます。

これは、あなたがまだ使用できますが(ほとんどのIDEは何の問題コード折りを持っていない)始まりと終わりを描写するために括弧を得ることを除いてIFDEFと同様の機能がある#define#ifdefコンテキスト内で、#include許可されていませんが。のようなインライン機能を取得するには#else、次のような対応するマクロを定義できます。

そのうちの1つだけNO_FOO()/IF_FOOがコードを生成します。

OK、それは便利なハックだが、我々はそれを作ることができるMOREより便利#ifdefsかもしれない...ブール論理と設定?いくつかの真理値表(およびいくつかのヘルパーマクロ)を設定しましょう。

config.h

code.c


あなたのスタイルのようなI(=
étale-コホモロジー

6

6

それはいけません。しかし、あなたは入れ替えることができます#ifdef#define


お返事をありがとうございます。COV_ON(on)とCOV_ON(off)を試しましたが、エラー:expected ')'、nearoffというエラーが表示されます。問題についての考え。
agent.smith 2011

コンパイラを知らなくても、予想される_Pragma構文が何であるかを知る必要があります。マクロなしでどうやってそれをしますか?
sam hocevar 2011

私はVC2005コンパイラを使用していて、_Pragma構文をオンラインで見ました。これまで、このように#pragmaを使用したことはありません。
agent.smith 2011

次に、stringifyハックが必要になります。この質問と回答を参照してください。
sam hocevar 2011

問題はVC2005だと思います。彼らは_Pragmaを使用しませんが、__ pragmaを使用します。よくわかりませんが、そのようです。しかし、それでも__pragmaで不明なプラグマの警告が表示されます。
agent.smith 2011

3

あなたが言ったように、#defineに#ifdefを含めることはできません。代わりに行うべきことは、順序を逆にすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.