ABOUT ME

-

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

    VC++ Error의 종류

    Error


    ★ #operator not followed by macro argument name
    매크로 함수의 정의에서 #연산자는 매개변수를 문자열화 하는데,
    #연산자 뒤에 매개변수 이외의 것이 오면 발생한다.


    ★ #define printing(msg) printf("Message is " #mssg "\n");
    위의 매크로 함수 printmsg의 인자인 msg를 오른쪽 식에서는 mssg로
    잘못 사용했다. 이럴 경우 발생하는 에러인데, 이 에러는 매크로를
    정의한 곳에서 발생하는 것이 아니라 이 매크로 함수를 사용한 곳에서
    발생한다.


    ★ 'XXXXXXXX' not an argument
    형식 매개변수가 함수의 매개변수 리스트에 없을 때 발생한다.


    ★ Argument # missing name
    함수의 원형에서 #번째 매개변수 명을 빠뜨렸다.


    ★ Argument list syntax error
    함수의 매개변수 리스트가 문법적으로 틀렸다.


    ★ Array bounds missing ]
    배열을 정의하거나 선언할 때 ]를 빠뜨렸다.


    ★ Array size too large
    배열의 크기가 65536바이트를 넘었다.
    배열은 한 세크먼트 크기인 65536바이트를 넘을 수 없는데 실제로는
    그 크기에 더 제한을 받는다.


    ★ Assembler statement statement too long
    인라인 어셈블리 코드를 삽입하기 위한 asm문은 480자를 넘을 수 없다.


    ★ Bad configuration file
    TURBO.CFG파일에 명령행 컴파일러(TCC.EXE)의 옵션으로 옳지 못한 문자가
    들어있다. 각 옵션들이 -(데쉬)로 시작하지 않아서 발생할 경우가 많다.


    ★ Bad file name format in include directive
    include에서 사용하는 파일에 " 나 < 또는 > 를 빠뜨렸다.


    ★ Bad ifdef directive syntax
    #ifdef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이 오면 이 에러가
    발생한다. #ifdef문의 뒤에는 항상 매크로명이 와야 한다.


    ★ Bad ifndef directive syntax
    #ifndef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이 오면 이 에러가
    발생한다. #ifndef문의 뒤에는 항상 매크로명이 와야 한다.


    ★ Bit field size syntax
    #ifdef문이나 #ifndef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이
    오면 이 에러가 발생한다. #ifdef문이나 #ifndef문의 뒤에는 항상
    매크로명이 와야 한다.


    ★ Cannot modify a const object
    const로 선언된 값을 변경시키려 했다.


    ★ Case outside of switch
    case문을 Switch문의 밖에서 사용했다.


    ★ Case statement missing :
    case문에서 :를 빠뜨렸다.


    ★ Cast syntax error
    cast에 잘못된 기호가 있다.


    ★ Character constant too long
    문자 상수는 1바이트 또는 2바이트 크기의 데이터만을 가질 수 있는데, 그 크기를
    넘어 섰다. 확장열 사용시 열슬래쉬(\)가 빠져 있는지 살표본다.
    예) char ch;
    ...
    ch = '/xff'; /* 역슬래쉬를 슬래쉬로 잘못 사용. 에러가 발생한다. */


    ★ Compound statement missing
    여는 괄호와 닫는 괄호의 갯수가 같지 않다.


    ★ Conflicting type modifiers
    한 포인터에 대해 near와 far의 키워드를 한꺼번에 선언하는 경우와 한 함수에서
    함수의 변경자(cdecl, pascal, interrupt등)를 한꺼번에 사용할 경우 발생한다.


    ★ Constant expression required
    상수 수식만을 사용해야 되는 곳에 변수나 수식 등이 들어가 있다.


    ★ Could not find file 'XXXXXXXX.XXX'
    명령행에서 지정한 파일이 없다.


    ★ Declaration missing ;
    struct문이나 union문에서 세미콜론(;)을 빠뜨렸다.


    ★ Declaration needs type or storage class
    선언은 적어도 한개의 형이나 기억분류를 지정해 주어야 한다.


    ★ Declaration syntax error
    선언에서 불필요한 기호가 들어가거나 필요한 기호가 빠졌다.


    ★ Default outside of switch
    default문을 switch문의 밖에서 만났다.


    ★ Define directive needs an identifier
    #define문의 뒤에는 항상 매크로 명이 와야한다. 매크로 명도
    일종의 명칭(identifier)이므로 "의 문자는 사용할 수 없다.


    ★ Division by zero
    소스 파일에 있는 수식에서 0으로 나누는 식이 있다.


    ★ Do statement must have while
    do문은 while과 함께 쓰여야만 한다.


    ★ Do-while statement missing (
    do-while문에서 ( 를 빠뜨렸다.


    ★ Do-while statement missing )
    do-while문에서 ) 를 빠뜨렸다.


    ★ Do-while statement missing ;
    do-while문에서 ;를 빠뜨렸다.


    ★ Duplicate case
    switch문안의 case문에 같은 값을 갖는 case문을 두번이상 사용했다.


    ★ Enum syntax error
    enum형 데이터의 선언이 올바르지 못하다. 기억부류 지정자, 키워드,
    enum, 열거택, 열거 리스트, 변수명등의 나열 순서가 올바른지, 열거 멤버의
    수치 지정이 제대로 되어 있는지 살펴본다.


    ★ Error directive:XXX
    컴파일 도중에 #error 컴파일러 지시어를 만났다.


    ★ Error writing output file
    디스크가 꽉 찼거나 기타 다른 이유로 목적 파일이나 실행 파일을 생성할 수
    없을때 발생한다.


    ★ Expression syntax
    컴파일러가 수식을 분석하다가 문제점을 발견하면 이 에러를 발생시킨다.
    보통 다른 에러를 같이 동반한다. 연산자를 두 개 이상 연달아 사용하거나,
    괄호의 짝이 맞지 않다던가, 세미콜론을 빠뜨렸다던가 등등에서 발생한다.


    ★ Extra parameter in call
    함수를 호출할 때 함수의 선언에 표기된 것 보다도 많은 매개변수를
    사용했다 (함수 포인터)


    ★ Extra parameter in call to XXXXXXXX
    함수를 호출할 때 함수의 선언에 표기된 것보다도 많은 매개변수를 사용했다.


    ★ File name too long
    #include문에서 지정한 파일명이 너무 길다.


    ★ For statement missing (
    For문에서 ( 를 빠뜨렸다.


    ★ For statement missing )
    For문에서 ) 를 빠뜨렸다.


    ★ For statement missing ;
    For문에서 ; 를 빠뜨렸다.


    ★ Function call missing )
    함수의 호출에서 매개변수에 사용한 괄호의 갯수가 틀리거나 닫는 괄호를
    빠뜨렸다.


    ★ Function definition out of place
    함수의 정의는 다른 함수의 내부에 있을 수 없다.


    ★ Goto statement missing label
    Goto문에서 레이블을 생략했다.


    ★ If statement missing (
    If문에서 ( 를 빠뜨렸다.


    ★ If statement missing )
    If문에서 ) 를 빠뜨렸다.


    ★ Illegal character 'C'(0xXXX)
    컴파일 도중 잘못된 문자를 만났다.


    ★ Illegal initialization
    변수의 초기화가 틀렸다. 변수의 초기화는 상수식이거나, extern 또는
    static으로 선언한 변수의 주소를 사용할 수 있다.


    ★ Illegal octal digit
    8진수에서 8진법에 맞지 않는 수(8이나 9)를 사용했다.


    ★ Illegal pointer subtraction
    포인터가 아닌데서 포인터를 뺐다.


    ★ Illegal structure operation
    구조체는 . 연산자, & 연산자, sizeof 연산자, = 연산자를 사용하거나 또는
    구조체를 함수로 건네 주거나 되돌려받는 일만 할 수 있다.
    구조체끼리 == 연사자를 사용하거나, = 연산자 양변의 구조체가 서로 다른
    데이터 형을 가질 때도 발생한다.


    ★ Illegal use of floating point
    부동 소수점을 사용하는 수는 비트연산자나 shift연산자, indirection(*)을
    사용할 수 없다.


    ★ Illegal use of pointer
    포인터는 더하기, 빼기, 지정, 비교, Indirection(*), ->에만 사용할 수 있다.
    이 외에 다른 연산을 할 때 발생하는 에러이다.


    ★ Improper use of a typedef symbol
    typedef로 정의한 형명을 수식 내에서 단독으로 사용하였다. typedef로 정의한
    형명은 캐스트 연산자나 아니면 변수의 선언에만 사용할 수 있다.


    ★ In-line assembly not allowed
    소스 파일에 In-line 어셈블리가 들어있다. 이 때는 터보 C 명령행 버전인
    tcc.exe를 이용해 컴파일 해야 한다.


    ★ Incompatible type conversion
    서로 형변환을 할 수 없는 것끼리 형변환을 하려 했다. 함수와 함수가 아닌것간의
    변환과 구조체나 배열과 스칼라 형간의 변환 부동 소수점과 포인터간의 변환은
    할 수 없다.


    ★ Incorrect command line argument:XXXXXXXX
    명령행 컴파일러 사용시 인자가 옳지 못하다.


    ★ Inclrrect configuration file argument:XXXXXXXX
    명령행 컴파일러의 configuration파일인 turboc.cfg에 옳지 못한 내용이 들어
    있다. 각 옵션의 앞에 -가 붙어 있어야 한다.


    ★ Incorrect number format
    16진수에서 소수점을 만났다.


    ★ Incorrect use of default
    default문 뒤에 콜론(;)이 빠졌다.


    ★ Initializer syntax error
    초기화를 하는 식에 연산자가 빠져 있거나 필요없는 연산자를 사용했거나 괄호의
    잘못 사용에서 발생한다.


    ★ Invalid indirection
    void형 포인터에 indirection(*)을 사용했다.


    ★ Invalid macro argument separator
    #define문으로 매크로 함수를 정의할 때는 매크로 함수의 매개변수들은
    쉼표(,)로 구분되어져야 한다.


    ★ Invalid pointer addition
    두 포인터를 더하려 했다.


    ★ Invalid use of arrow
    화살표 연산자(->)를 잘못 사용했다.


    ★ Invalid use of dot
    점 연산자(.)를 잘못 사용했다.


    ★ Lvalue required
    좌변값을 필요로 하는 곳에 좌변값이 아닌 다른 값이 놓여져 있다.
    보통 = 연산자의 좌측에 오는 값이 대입할 수 없는 수식이나 상수식이 왔을 경우
    발생한다. 또한 번지 연산자(&)를 좌변값이 아닌 식에 사용하였을 경우에도
    발생한다.


    ★ Macro argument syntax error
    #define문으로 매크로 함수를 만들 때 매개변수가 있어야 할 자리에 엉뚱한
    문자가 있으면 발생한다.


    ★ Mismatched number of parameters in definition
    함수의 정의에 있는 매개변수와 함수의 원형(prototype)에 있는 매개변수의
    내용이나 갯수가 다르다.


    ★ Misplaced break
    switch문이나 다른 루프(for, while, do-while등)의 바깥에서 break문을 사용했다.


    ★ Misplaced continue
    switch문이나 다른 루프(for, while, do-while등)의 바깥에서 continue문을 사용했다.


    ★ Misplaced decimal point
    소수점에 사용하는 점(.)을 잘못 사용했다.


    ★ Misplaced else
    if문 없이 else문을 사용했다. 불필요한 세미콜론이나 괄호의 사용에서도
    발생할 수 있다.


    ★ Misplaced elif directive
    컴파일러가 #if, #ifdef, #ifndef문과 짝짓지 못한 #elif문을 만났다.


    ★ Misplaced else directive
    컴파일러가 #if, #ifdef, #ifndef, #elif문과 짝짓지 못한 #else문을 만났다.


    ★ Misplaced endif directive
    컴파일러가 #if, #ifdef, #ifndef, #elif, #else문과 짝짓지 못한
    #endif문을 만났다.


    ★ Must take address of memory location
    레키스터 변수에는 주소 연산자(&)를 사용할 수 없다.


    ★ No file name ending
    #Include문에 따옴표(")나 괄호(>)가 빠졌다.


    ★ No file names given
    명령행 컴파일러에서 컴파일할 파일명을 지정하지 않았다.


    ★ Non-portable pointer assignment
    포인터를 포인터 아닌 곳에 대입하려 했다. 에러 메시지를 막기 위해
    case 연산자를 사용해야 한다.


    ★ Non-portable pointer comparison
    포인터를 포인터 아닌 것과 비교하려 했다. 에러 메시지를 막기 위해
    cast 연산자를 사용해야 한다.


    ★ Non-portable return type conversion
    return문에 있는 식이 함수의 형과 다르다.


    ★ Not an allowed type
    C에서 허용되지 않는 형의 데이터를 선언하였다.


    ★ Out of memory
    컴파일을 하기에 메모리가 부족하다. 메모리를 많이 차지하는 램상주
    프로그램이 있을 경우 이를 제거한다.
    소스 파일이 너무 클 경우에는 소스 파일을 단순화 시키거나 소스 파일을
    분할하여 분할 컴파일을 해야 한다.


    ★ Pointer required on left side of ->
    ->의 왼쪽 피연산자는 반드시 구조체나 공용체 포인터이어야 한다.


    ★ Redeclaration of 'XXXXXXXX'
    이미 선언되어 있는 identifier를 선언하려 했다.


    ★ Size of structure or array not known
    배열을 정의할 때 생략할 수 없는 배열 크기를 생략 했거나, 배열의 크기를
    빠뜨린채로 외부 배열을 선언하고 sizeof의 피연산자로 사용했거나,
    그 외부 배열을 사용하면 발생한다.


    ★ Statement missing ;
    식이나 문장의 끝에 세미콜론이 빠져있다.


    ★ Structure or union syntax error
    구조체나 공용체 선언이 문법에 어긋났다.


    ★ Structure size too large
    구조체의 크기가 너무 커서 사용가능한 메모리에 그 구조체를 생성할 수 없다.


    ★ Subscripting missing ]
    배열 첨자 지정에 ]를 빠뜨렸다.


    ★ Switch statement missing (
    Switch문에서 ( 를 빠뜨렸다.


    ★ Switch statement missing )
    Switch문에서 ) 를 빠뜨렸다.


    ★ Too few parameters in call
    함수의 호출에 매개변수가 모자란다.


    ★ Too few parameters in call to 'XXXXXXXX'
    함수의 호출에 매개변수가 모자란다.


    ★ Too many cases
    switch문안에서 case문을 너무 많이 사용했다. 한 switch문에서
    257개 까지의 case문을 사용할 수 있다.


    ★ Too many decimal points
    부동 소수점 상수에 한 개 이상의 점(.)이 사용되었다.


    ★ Too many decimal cases
    Switch문안에 한 개 이상의 case문이 사용되었다.


    ★ Too many exponents
    부동 소수점 상수에 한 개 이상의 지수가 있다.


    ★ Too many initializers
    초기화가 허용되는 범위보다 맣은 초기화를 했다. 주로 다음과 같은
    경우에 이 에러가 발생한다.
    (예) int num[3] = {1, 2, 3, 4} /* 세개의 데이터를 가질 수 있는 배열에
    네개의 초기화 값을 대입했다 */


    ★ Too many storage classes in declaration
    한 선언에서 여러개의 기억부류를 지정했다.


    ★ Too many types in declaration
    한 선언에서 여러개의 형(type)을 지정했다.


    ★ Too much auto memory in function
    한 함수에서 자동변수를 너무 많이 선언했다.


    ★ Too much code defined in file
    현재 소스 파일에 있는 총 함수의 크기가 64K바이트를 넘어섰다.
    소스 파일을 간단히 고치거나 소스를 분할하여 컴파일한다.


    ★ Too much global data defined in file
    선언한 전역 변수의 크기가 64K바이트를 넘었다.
    너무 큰 배열등을 없애거나 경우에 따라 프로그램을 재구성해야 한다.


    ★ Two consecutive dots
    C에서는 (..)은 사용되지 않는다.


    ★ Type mismatch in parameter #
    함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
    (함수포인터)


    ★ Type mismatch in parameter # in call to 'XXXXXXXX'
    함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
    (실제함수)


    ★ Type mismatch in parameter 'XXXXXXXX'
    함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
    (함수포인터)


    ★ Type mismatch in parameter 'XXXXXXXX' in call to 'YYYYYYYY'
    함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
    (실제함수)


    ★ Type mismatch in redeclaration of 'XXX'
    변수가 원래 선언된 것과 다른 형으로 다시 그 변수를 선언하였다.


    ★ Unable to create output file 'XXXXXXXX.XXX'
    출력파일(보통 .obj파일)을 생성하지 못한다. 디스크가 꽉 찼거나
    쓰기 방지(write protect)가 되어있거나 등등에서 발생한다.


    ★ Unable to create turboc.$ln
    tcc.exe가 링크를 하기 위해 tlink.exe를 호출하기 직전에 생성하는
    임시 파일인 turboc.$ln을 만들지 못한다. 바로 위와 같은 경우에
    발생할 수 있다.


    ★ Unable to execute command 'XXXXXXXX'
    터보 링커(tlink.exe)나 터보 어셈블러(tasm.exe)를 찾지 못한다.


    ★ Unable to open include file 'XXXXXXXX.XXX'
    #include문제 지정한 헤더 파일을 읽을 수 없다.


    ★ Unable to open input file 'XXXXXXXX.XXX'
    컴파일할 파일 'XXXXXXXX.XXX'를 읽어올 수 없다.


    ★ Undefined label 'XXXXXXXX'
    goto문에 지정한 레이블을 함수 블럭내에서 찾을 수 없다.


    ★ Undefined structure 'XXXXXXXX'
    정의 되지 않은 구조체 'XXXXXXXX'를 사용하였다.


    ★ Unexpected end of file in comment stated on line #
    주석문의 사용에서 */를 빠뜨렸을 경우에 발생한다.


    ★ Unexpected end of file in conditional stated on line #
    #endif를 빠뜨렸을 경우에 발생한다.


    ★ Unknown preprocessor directive:'XXX'
    전처리기 지시어로 틀린 명령이 들어가 있다.


    ★ Unterminated character constant
    '의 갯수가 맞지 않는다.


    ★ Unterminated string
    문자열이나 문자 상수에서 '또는 "를 빠뜨렸다.


    ★ User break
    컴파일 도중에 Ctrl-Break키를 눌렀다.


    ★ While statement missing (
    While문에서 ( 를 빠뜨렸다.


    ★ While statement missing )
    While문에서 ) 를 빠뜨렸다.


    ★ Wrong number of arguments in call of 'XXXXXXXX'
    매크로 함수 'XXXXXXXX'를 호출할 때 지정한 실 매개변수와 형식
    매개변수의 갯수가 다르다.


     

    댓글