4
this questionの回答によれば、L"test"
のようなリテラルはwchar_t[5]
です。しかし、GCCと、次のコードは、別の何かを言っているようだ:長い文字列リテラルの型はlong int *ですか?
int main()
{
struct Test{char x;} s;
s="Test"; // ok, char* as expected
s=L"Test"; // ??? I'd expect wchar_t*
return 0;
}
ここで(5.2 GCC、同じ結果が4.5と4.8である)私はそれをコンパイル方法は次のとおりです。
どうやら$ gcc test.c -o test -std=c99
test.c: In function ‘main’:
test.c:4:6: error: incompatible types when assigning to type ‘struct Test’ from type ‘char *’
s="Test"; // ok, char* as expected
^
test.c:5:6: error: incompatible types when assigning to type ‘struct Test’ from type ‘long int *’
s=L"Test"; // ??? I'd expect wchar_t*
^
、代わりに期待される配列wchar_t
私はlong int
の配列を得る。ここで何が間違っていますか?
しかし、Linuxではwchar_tは32ビットですが、アーキテクチャによってはlong intの単なるtypedefかもしれません。 –
'struct Test {} s;'は意味がありません。構造体には少なくとも1つのメンバが必要です。コンパイルするコードを提示してください。 – 2501
'wchar_t'は組み込み型ではありません。これは実装定義型で、システム上では 'long int'と同じです。私のシステムでは、それは単なる古いintです。 – user3386109