質問: QtCreatorのC++のインラインアセンブルがエラーになります。 Q1) 解決方法はありますか? double Mrand(){ static int M_RND=0x30000000; double MAX=pow(2,31.0); asm{ <ーーここでcplエラー mov eax,M_RND shl eax,1 pushf jnc F xor eax,80000009h //invalid suffix"h" on integer constant // xor eax,80200003h // xor eax,0000c001h // xor eax,80030000h F: mov M_RND,eax popf } double val1; val1=M_RND; val1=val1/MAX; return val1; } 以上、宜しくお願いします。
回答: OSがWindowsでx64の場合インラインアセンブリを使うのは諦めたほうが良いです。MSVCのx64版はインラインアセンブリをサポートしないので、どうしてもアセンブリで書きたいのであれば。アセンブリのソースをC++のソースから切り離して使うことになるでしょう。 GCCやClangでは ``` asm("xor rax, rax"); ``` のようにダブルクオートでくくらなければなりません GCCのインラインアセンブラについてはこちらのサイトがわかりやすいです。 結論 1. MSVCでインラインアセンブリを使うならx86(32bit)版を使う 2. MSVC(x64版)を使うなら、MASMなど別のアセンブラを利用してリンカでくっつける。 3. CygwinやMinGWなどについてくるGCCやClangを使う。