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;
}
내가 그것을 컴파일 방법 (GCC 5.2,하지만 같은 결과는 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
이됩니다. 여기 뭐가 잘못 됐니?
리눅스에서는 wchar_t가 32 비트이지만 일부 아키텍처에서는 long int의 typedef 일 수도 있습니다. –
'struct Test {} s;'는 의미가 없습니다. 구조체에는 적어도 하나의 멤버가 있어야합니다. 컴파일하는 코드를 제시하십시오. – 2501
'wchar_t'는 빌트인 타입이 아닙니다. 이것은 시스템에서'long int'와 같은 형태로 구현 된 정의 된 타입입니다. 내 시스템에서, 그것은 단지 평범한 오래된 int입니다. – user3386109