2009-10-20 11 views
8

なぜ私はブックからの例をコンパイルできないのだろうかと思っています。著作権で保護された本の例を掲載するのを避けるため、ここでは例を簡略化します。グラム++でコンパイルするとCのバイトと文字の違い

#include <stdio.h> 

BYTE *data = "data"; 

int main() 
{ 
    printf("%s", data); 
    return 0; 
} 

、私はエラーを取得し、

error: invalid conversion from 'const char*' to 'BYTE*' 

プログラムは、単に文字でBYTEを交換することによって動作しますが、一例は、本から来るので、私は何か間違ったことしなければなりません。

問題を指摘してください。ありがとう。

+1

質問には 'C'というタグがついていますが、あなたは' g ++ 'を使っていると言っています。これは' C++ 'コンパイラです。どの言語を使用していますか? –

+0

はい、CまたはC++? – Raptor

+2

私はC++のCの部分を使っています。 Isnt C++はCと下位互換性があるので、C言語のみを使用している場合は、g ++やgccに関係ありませんか? – idazuwaika

答えて

27

​​はC言語またはC標準ライブラリの一部ではないため、標準のstdio.hヘッダーファイルを含めた後で定義されているかどうかはシステムによってまったく異なります。

​​マクロを定義する多くのシステムでは、多くの場合、unsigned charです。 const char*からunsigned char*に変換するには、明示的なキャストが必要です。

+0

ええ - あなたの答えはidazwaika - カスタムデータ型の定義が問題を引き起こす可能性があります。 – ChrisBD

+0

C標準では、charをsigned charまたはunsigned charのいずれかにすることで、予期しない結果につながることに注意してください。 –

+0

ありがとうございます。私はBYTEマクロの定義を捜す必要があるように見えます。すでにマクロが翻訳されているCプリプロセッサの出力を得る方法はありますか? – idazuwaika

関連する問題