2016-08-28 20 views
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の配列を得る。ここで何が間違っていますか?

+5

しかし、Linuxではwchar_tは32ビットですが、アーキテクチャによってはlong intの単なるtypedefかもしれません。 –

+1

'struct Test {} s;'は意味がありません。構造体には少なくとも1つのメンバが必要です。コンパイルするコードを提示してください。 – 2501

+1

'wchar_t'は組み込み型ではありません。これは実装定義型で、システム上では 'long int'と同じです。私のシステムでは、それは単なる古いintです。 – user3386109

答えて

2

wchar_t型は、char型のような基本型ではありません。整数型の実装定義の同義語であるです。 (:ISO/IEC 9899:から引用201X 7.19共通定義2)


範囲の値の最大拡張の全て メンバーの異なるコードを表すことができる整数型である
のwchar_tサポートされているロケール間で指定された文字セット。

関連する問題