

プロセッサを調べるプログラムをコンパイルしたところ、
以下のような
static inline void cpuid (int op, int *eax, int *ebx, int *ecx, int *edx) {
asm("cpuid": "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx);
: "a" (op) : "cc");
}
ところで
error C2054: 'inline' の後にはカッコが必要です。
error C2085: 'cpuid' : 仮引数リスト内にありません。
error C2143: 構文エラー : ';' が '{' の前に必要です。
というエラーが出てきました。
何か間違っているところがあれば教えてください。
お願いします。
No.2ベストアンサー
- 回答日時:
もし、おつかいのコンパイラがVCなら、inline、asm は、C言語では使えません。
代わりに、__inline、__asm を使います。
さらに、インラインアセンブラの構文が、VCのインラインアセンブラではありません。
質問にあるコードは、GCCのインラインアセンブラの構文です。
この回答への補足
回答ありがとうございます。
勉強になります。
それで実行した結果、質問のエラーは消えたのですが、構文エラーが出てきました。
VCのインラインアセンブラはどう書いたらいいのでしょうか?
わがまま言ってすいません。
No.3
- 回答日時:
#1の方の指摘どおり、asmの行の最後、(*edx)の直後のセミコロンを取り除けば、i686ターゲットのGCCならコンパイルできました。
エラーメッセージを見る限り、Visual C++のようです。Visual C++はC99に対応していませんので、inlineは使えませんし、インラインアセンブラの書式も異なります(#2の方の指摘どおり)。
この回答への補足
回答ありがとうございます。
指摘の通りに直したところ関数の表示になりました。
それで以下
static __inline void cpuid (int op, int *eax, int *ebx, int *ecx, int *edx) {
__asm "cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (op) : "cc" ;
}
で再度実行したところ
error C2400: 'オペコード' の 'bad token' はインライン アセンブラの構文エラーになります。
とやはりエラーがでました。
VCの場合のインライン アセンブラの構文とはどんなものなんでしょうか?もしよろしければ教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2重定義って??
-
visualstudio C# テキストボッ...
-
DWORDの実際の型は何でしょうか
-
構造体の要素すべてに対する四...
-
C++デバックエラーについて詳し...
-
C++ Builderでのpublic変数の扱...
-
C++でboolにintの値を代入する...
-
変数の型を定義しなかった場合...
-
コンパイルすると error C1083 ...
-
intとINTの違いは?
-
atoi() 実行エラー
-
ハンドルされていない例外が発...
-
【#define】 defineで定義した...
-
GCCで暗黙の型変換の警告を出し...
-
C言語で分割ファイル先の関数を...
-
関数名 (type *)
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
c languageで 簡単な質問があ...
-
エクセルで可視セルにのみ値貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
main.c:7:43: warning: implici...
-
long型の定数の末尾にLを付ける...
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
C++のfor文について
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
intとINTの違いは?
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
プログラムの中で別のmainを呼...
-
エラー「invalid conversion fr...
-
GCCで暗黙の型変換の警告を出し...
-
【#define】 defineで定義した...
-
sshdログの意味
-
DDVによるメッセージの変更
-
typedef enumの使い方を教えて...
-
構造体を生成時にわざわざ初期...
-
DLLでLIBファイルが作成されない
おすすめ情報