ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VC++ Warning의 종류.
    프로그래밍/프로그래밍 관련 2005. 8. 22. 20:42

    VC++ Warning의 종류.

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


     

    댓글