블로그는 나의 힘!
[ Programing ]/C++2010. 1. 31. 07:40

Warning

★ 'XXXXXXXX' declared but never used 
자동 변수를 선언해 놓았지만 한번도 사용하지 않았다. 이 메시지는 자동변수를 
선언한 함수의 끝에서 발생한다.


★ 'XXXXXXXX' is assigned a value which is never used 
자동 변수를 선언해 놓고 어떤 값을 대입시키기는 했지만 한번도 사용(참조)하지 
않았다.


★ 'XXXXXXXX' not part of structure 
구조체의 멤버 연산자인 . 이나 ->의 오른쪽 피 연산자가 구조체의 멤버가 아니다.


★ Ambiguous operators need parentheses 
쉬프트 연산자. 비트 연산자, 관계 연산자가 괄호 없이 사용될 때 이 경고가 
발생한다.


★ Both return and return of a value used 
한 함수에서 여러번 return문이 있을 때 각각이 되돌리는 값의 형(type)이 서로 
같지 않다.


★ Call to function with no prototype 
함수의 선언이 없이 함수를 사용했다.


★ Call to function 'XXXX' with no prototype 
함수 'XXXX'를 선언 없이 사용했다.


★ Code has no effect 
아무런 효과가 없는 수식을 사용했다. 예를 들어 a+b;라는 수식은 에러를 발생 
시키지는 않지만 아무일도 하지 않게 되고 이 경고를 발생시킨다.


★ Constant is long 
32767보다 큰 10진 상수나 65535보다 큰 8진수 또는 16진수를 뒤에 1이나 L을 
붙이지 않고 사용했다. 이 때 사용한 상수는 long형으로 처리된다.


★ Constant out of range in comparison 
관계연산자의 양변을 비교할 때 양변의 값이 비교 가능한 범위를 벗어났다. 
서로 다른형의 데이터를 비교할 때는 두 값이 같은 허용범위 안에 있어야 한다. 
예를 들면, unsigned형과 int형의 데이터를 비교 하려면 둘다 0에서 32767사이의 
값을 가지고 있어야 한다. 또, unsigned형과 -1이라는 값과의 비교는 
무의미함으로 주의해야 한다.


★ conversion may lose significant digits 
unsigned long형이나 long형의 데이터가 int형의 데이터로 변환될 때 이 경고가 
발생한다. 변환 전의 값이 int형 범위 안에 속해 있으면 별문제가 없자만, 
int형의 범위를 벗어나는 값은 데이터의 앞의 두 바이트가 없어져 버리므로 
주의해야 한다.


★ Function should return a value 
void형이 아닌 함수인데 되돌림 값을 되돌리지 않았다.


★ Hexadecimal or octal constant too large 
문자상수나 문자열 상수내에서 사용한 16진 또는 8진 확장열의 값이 
1바이트를 넘어섰을 때 발생한다.


★ Mixing pointers to signed and unsigned char 
signed char와 unsigned char간의 변환이 일어날 때 발생한다. 이 경고는 
실행에 어떤 해도 주지 않는다.


★ No declaration for function 'XXXXXXXX' 
함수를 호출하기 전에 그 함수가 선언이나 정의가 미리 되어있지 않으면 발생한다.


★ Non-portable pointer assignment 
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로 
대입 시키려 했다.


★ Non-portable pointer comparison 
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로 비교 
하려 했다.


★ Non-portable pointer conversion 
함수형이 포인터 형인데 포인터가 아닌 값을 되돌리려고 했거나 그 반대의 일을 
시도 했다. 캐스트 연산자를 사용하면 이 경고를 막을 수 있다.


★ Parameter 'XXXXXXXX' is never used 
함수의 매개변수를 함수내에서 한번도 사용하지 않았다.


★ Possible use of 'XXXXXXXX' before definition 
자동변수를 초기화시키지 않은 채로 사용하였다.


★ Possibly incorrect assignment 
if, while, do-while문의 조건식에서 대입 연산자를 사용하였다. 
보통 ==를 =로 잘못 사용한데서 비롯되지만 대입 연산자를 사용하여야 할 
경우에는 다음과 같이 한다. 
(예) if(ch = getch()) ... 
↓ 
if((ch=getch()) != 0) ...


★ Redefinition of 'XXXXXXXX' is not identical 
매크로 정의를 한 후에 또다시 재정의를 하는데 그 값이 이전에 정의한 값과 
다르다. 다른 값으로 정의 해야할 필요가 있으면 #undef문을 사용하여 매크로 
정의를 취소한 후에 다시 정의해야 한다.


★ Restarting compile using assembly 
tcc를 이용하여 컴파일할 때 소스 파일내에 asm(인라인 어셈브리)이 
사용되었으면 어셈블러로 다시 컴파일한다는 경고를 낸다.


★ Structure passed by value 
구조체를 몽땅 함수로 넘겨 주었다. 프로그램의 실행에는 전혀 무해하지만, 
보통 구조체의 데이터는 구조체 포인터를 사용하여 전달해 주는 것이 
바람직하다.


★ Superfluous & with function or array 
함수명은 그 자체가 함수를 가리키는 번지값을 가지고 있는데, 필요없는 
번지연산자(&)를 함수명에 사용하였다.


★ Suspicious pointer conversion 
다른 형을 가리키는 포인터끼리의 형변환이 일어났다. 변환이 정당할 경우에는 
캐스트 연산자를 사용하여 이 경고를 없앨 수 있다. 
그렇지 않을 경우에는 이 경고 메시지를 발생 시킨부분을 확실히 고쳐야 하며, 
그대로 방치하거나 캐스트 연산자 남용의 경우에는 무지무지 심각한 버그를 
유발할 수 있다.


★ Undefined structure 'XXXXXXXX' 
정의되지 않은 구조체 택을 사용하였다. 
보통 구조체 택의 철자 오류에서 나타난다.


★ Unknown assembler instuction 
인라인 어셈블리에 허용되지 않는 어셈블리 코드가 들어가 있다.


★ Unreachable code 
프로그램 중에 제어가 도달하디 낳는 부분이 있다. 즉 한번도 실행되지 않는 
부분이 있다. break, continue나 goto문을 잘못 하용했거나,if나 while문 
등에서 조건식이 무한루프가 되어 버렸거나 할 경우에 발생한다.


★ void functions may not return a value 
void형 함수는 아무 값도 되돌릴 수 없는데 return문이 어떠한 값을 
되돌리려 했다.


★ Zero length structure 
크기가 0인 구조체를 정의해 놓았다.


===========================================================




출저 : 싸구려코드 블로그 ( http://sarangsai.com/2 )


Posted by Mister_Q