2015-01-12 11 views
1

부호가없는 문자를 사용하여 작은 범위의 정수를 나타내는 프로그램이 있습니다. 접미사가 없기 때문에C 리터럴의 문자 부적합 유형에 대한 경고

Variable c initialized to type int, expects unsigned char: 0 
    Types are incompatible. 

:

unsigned char c = 0; 

경고를 제공합니다 : 나 자신이 프로그램의 여러 다른 부분에 0을 취소 할 필요가 발견, 나는 또한 최근에 분명히 부목 등을 사용하기 시작했다 리터럴 char의 경우 어떻게 이것을 해결하는 것이 가장 좋습니까? 몇 가지 옵션이 있다고 생각합니다.

1 : 경고를 무시하십시오.

2 :

unsigned char c = (unsigned char)0; 

3 : 때마다 캐스트

unsigned char uc_0 = (unsigned char)0; 
unsigned char c = uc_0; 

4 : 함수 :

static inline unsigned char uchar(int in) 
{ 
    return (unsigned char)in; 
} 
unsigned char c = uchar(0); 
+0

IMO, 옵션 4로 가야합니다. 'return' 문에 캐스팅 할 필요가 없습니다.'표현식에 나타나는 함수의 반환 유형과 다른 유형이있는 경우 , 값은 함수의 반환 유형을 가진 객체에 대입하여 마치'6.8.6.4','c99'에서 변환됩니다. –

+0

@iharob 컴파일러가 아닌, 부목 : http://www.splint.org/ – jayjay

+0

@SouravGhosh 고마워, 그게 많은 의미가있어,하지만 나는 splint에서 경고없이 출력 할 캐스트가 필요하다. not signed type unsigned char' – jayjay

답변

2

코드의 길이를 줄일 수있는 VAR을 확인 splint에는 +charint의 옵션이 있습니다. charint은 상호 교환 가능합니다.

+2

' '\ 0 ''도'int' 타입입니다. [편집 :] [부목] 아닙니다 (http://www.splint.org/manual/html/sec4.html). 링크를 추가 할 수 있습니다. – mafso

+0

옵션 1을 권하고 있습니까? ;) – jayjay

+1

글쎄, 경고를 무시하는 것은 아니기 때문에 경고문을 보지 않아도된다. 즉, 경고문이 의도 된 것이므로 경고를 표시하지 않는 것이 좋다. –

0

경고를 무시하고 대신에 분명히 문자 사람들이 unsigned char의 사용을보다 여분의 메모리를 소모 int를 사용하는 메모리를 절약하기 위해 정수 작업이있을 때 많은 경우에

unsigned char = 0; 

를 사용할 수 있습니다.