これは私が遭遇した最も奇妙なことの一つです。私の問題はこれです:定数問題を伴うビット演算
CONST
が定義されている
void Class::function(int flag)
{
if ((flag & CONST) != 0)
printf("Passed.");
else
printf("Failed.");
}
:すべての
まず、私はC++ \ CLIプロジェクトでのWindows 7上のVisual Studio 2015を使用しています、私は、次のカントーなコードを持っています別の(非CLR)DLLで0x111
になります。かなりまっすぐに見えます。私が持っていた問題は、flag
が0x40
に等しい手順に入ったときです。私には、実際にはPassed.
を印刷したときに、この手順でFailed.
を印刷するように見えます。私は次のことは、次のように私のコードを変更しました:
void Class::function(int flag)
{
int local = CONST, localRes = flag & local, res;
if ((res = (flag & CONST)) != 0)
printf("Passed.");
else
printf("Failed.");
}
、printf
の実行を破り、私は腕時計に次の値を得た:
res = 0x110
local = 0x111
localRes = 0x0
私が見ることができませんでしたその文脈ではVSはそれを知らなかったが、CONST
の値。
私の言う限り、私はこれをlocal
を使って回避することができましたが、私はむしろそれを理解したいと思います。誰かがコンパイル/実行に何が問題なのか教えていただけますか? ありがとう!
EDIT:(extern "C"
として含まれる)を含むヘッダ・ファイルでは、そうのように定義される:
#define CONST/
C1 | C2 | C3
はかなり定期的に、C1
は0x1
ある、C2
は0x10
ある場合、及びC3
は0x100
あります。
「CONST」はどのように定義されていますか? –
'CONST'を' extern'として定義しようとしましたか? –
これはあまり明確ではないかもしれません。特に、「別の非CLR dllで定義された」という主張は非常に難しいようですが、dllからのデータのエクスポートはあまり明らかではありません。 –