私はこのコードを持っています:
__asm jno no_oflow
overflow = 1;
__asm no_oflow:
次の素晴らしい警告が生成されます。
エラー C4235: 非標準の拡張子が使用されています: '__asm' キーワードはこのアーキテクチャではサポートされていません
その前に発生した減算演算のオーバーフローをチェックするために、このコードの等価/許容可能な代替は何ですか?
私はこのコードを持っています:
__asm jno no_oflow
overflow = 1;
__asm no_oflow:
次の素晴らしい警告が生成されます。
エラー C4235: 非標準の拡張子が使用されています: '__asm' キーワードはこのアーキテクチャではサポートされていません
その前に発生した減算演算のオーバーフローをチェックするために、このコードの等価/許容可能な代替は何ですか?
まず、以下を定義します。
#ifdef _M_IX86
typedef unsigned int READETYPE;
#else
typedef unsigned __int64 READETYPE;
#endif
extern "C"
{
READETYPE __readeflags();
}
#pragma intrinsic(__readeflags)
次に、次のようにeflagsレジスタを確認できます。
if ( (__readeflags() & 0x800))
{
overflow = 1;
}
上記のコードは、ある種の整数オーバーフロー/アンダーフローをキャッチしようとしていると思いますか? おそらく、この質問に対する答えが役立つでしょう:整数オーバーフローを検出する方法は?
Microsoft が 64 ビットでのインライン アセンブリを禁止した理由はわかりません。ただし、別の .asm ファイルにアセンブリを記述し、それに対してプログラムをリンクすることはできます。
以下は、すべてのプラットフォームで利用可能な組み込み関数のリストです。そこには適切なものがないように見えます。最も移植性の高い方法は、減算の前にオーバーフローが発生するかどうかを確認することだと思います。