Warning....

언어/C&C++ 2008. 6. 18. 14:55

----- 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인 구조체를 정의해 놓았다.


WRITTEN BY
정현석
이것저것 끄적끄적....

,