次のc言語コードを

visual studio express 2010でコンパイルしようとすると、
mov %%eax,%0;":"=r"(foo),"=r"(cf_error_status)::"%eax","%edx");
の最初のコロンに関して
「IntelliSense: ')' が必要です」とエラーが出てしまいます。
よい対処法はないでしょうか?

ちなみに、MinGWを使ってgccでコンパイルするとエラーなく、実行もできます。

int _rdrand32_step(unsigned int *therand)
{
int foo;
int cf_error_status;
asm("\n\
rdrand %%eax;\n\
mov $1,%%edx;\n\
cmovae %%eax,%%edx;\n\
mov %%edx,%1;\n\
mov %%eax,%0;":"=r"(foo),"=r"(cf_error_status)::"%eax","%edx");
*therand = foo;
return cf_error_status;
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/06/05 23:05:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Sampo No.1

回答回数556ベストアンサー獲得回数104

ポイント200pt

それはコロンが問題ではなくその前の引用符がバックスラッシュでエスケープされていないから出ているエラーです。

で、それを直してもやはりコンパイルは通らないはず。
インラインアセンブラのその書き方はgcc独自のもので、VCではまた別に__asmキーワードを使った書き方をします。
http://codezine.jp/article/detail/393

インラインアセンブラを使ってコンパイラ過般なプログラムを書くのは無理とお考えください。

他1件のコメントを見る
id:Sampo

残念ながらVCのインラインアセンブラはちょこっと修正したことがある程度なのでそこまではお答えできません。 __asm というキーワードで検索すれば情報は豊富なので、がんばってみてください。

2013/06/05 23:05:27
id:hatabou6

Sampoさん

ありがとうございます。
改めて質問をしてみます。
ご回答ありがとうございました。

2013/06/05 23:07:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません