私は(そうOKである物理アドレスにアクセスして、それはマイクロコントローラ上にある)マクロに対処している(条件付き定義の長いシーケンスの後に、属性など):比較Cマクロ
#define ADDR_A (*18)
#define ADDR_B (*30)
#define ADDR_C (*18)
I
#if ADDR_A==ADDR_C
return 1;
#else
return 0;
#endif
しかし、私が手:私はコンパイルを最適化することができますので、それらを比較したいと思います:理にかなっている「エラーをオペレータに 『*』は、左のオペランドがありません」。マクロの定義を比較することは可能ですか?私は彼らを何とか比較するために文字列に変換することができる愚かさを持っていますが、私は(マクロ引数のための#と同様に)方法を見つけていません。
いいえ、私はサイクルを数えているので、実行時にこれを行うつもりはありません。
これは有効ではありません。C.コンパイラは、それがアドレスであり、オブジェクトの型がどのようになっているのだろうと思いますか?残りの質問は明確ではありません。あなたは何を比較したいのですか?なぜですか?それはXY問題のようなにおいをします。 – Olaf
私は@Olafと完全に同意します。さらに、私が使用したCコンパイラはすべて、式にリテラル定数のみがある場合(通常は2つのメモリマップレジスタのアドレスを比較する場合と同じように)、通常の 'if'ステートメントを最適化します。マイクロコントローラを使用しているので、とにかく最適化を有効にする必要があります。つまり、関連するコードを最適化するために*プリプロセッサ*に依存する必要はありません。どのような半分のまともなCコンパイラはあなたのためにそれを行います(通常のC 'if'文を使用する場合)。 –