taiyo의 정보창구
C2143 에러 해결 방법
C2143 에러는 컴파일러가 특정 토큰을 예상했는데 다른 토큰을 발견했을 때 발생하는 구문 오류 이 에러는 다양한 상황에서 발생할 수 있지만, 대표적으로 두 가지 경우가 있습니다.
- 변수 선언을 잘못한 경우
- 헤더 파일의 문제
변수 선언을 잘못 한 경우
그림
C 언어는 C++과는 다르게 변수 선언 부분이 제약되어 있습니다. 즉, 변수를 선언할 때는 함수의 시작 부분에만 할 수 있고, 함수나 다른 문장 앞에는 할 수 없습니다. 이 규칙을 어기면 C2143 에러가 발생합니다.
예를 들어, 다음과 같은 코드는 C2143 에러를 발생시킵니다.
#include <stdio.h>
void function();
int main()
{
function();
int n; // error C2143
return 0;
}
이 코드에서는 main 함수 안에서 function 함수를 호출한 후에 n이라는 변수를 선언하고 있습니다. 이렇게 하면 컴파일러는 n 앞에 세미콜론이나 다른 토큰을 예상하게 되고, 에러를 보고하게 됩니다. 이 에러를 해결하려면 변수 선언을 함수의 시작 부분으로 옮겨주면 됩니다. 즉, 다음과 같이 수정하면 됩니다.
#include <stdio.h>
void function();
int main()
{
int n; // no error
function();
return 0;
}
이렇게 하면 컴파일러는 n 을 정상적으로 인식하고 에러가 발생하지 않습니다.
헤더 파일의 문제
그림
헤더 파일은 C 언어에서 다른 소스 파일에 공통적으로 사용되는 선언이나 정의를 담고 있는 파일입니다. 불러오려면 #include 지시문을 사용합니다. 다음과 같은 코드는 stdio.h라는 헤더 파일을 불러옵니다.
#include <stdio.h>
헤더 파일에는 보통 타입 정의, 매크로 정의, 함수 선언 등이 들어갑니다. 이 파일을 작성할 때는 구문 오류가 없도록 주의해야 합니다. 특히, 세미콜론이나 괄호 등의 토큰이 빠지거나 잘못되었을 때 C2143 에러가 발생할 수 있습니다.
예를 들어, 다음과 같은 헤더 파일은 세미콜론이 빠져서 에러를 발생시킵니다.
//Mytest.h
typedef struct {
int x;
int y;
} Point // error C2143
이 헤더 파일을 불러오는 소스 파일은 다음과 같습니다.
#include "Mytest.h"
int main()
{
Point p; // error C2143
return 0;
}
이 코드에서는 test.h 라는 사용자 정의 헤더 파일을 불러오고 있습니다. 이 헤더 파일에는 Point라는 구조체 타입을 정의하고 있습니다. 그런데, 이 구조체 타입의 정의 뒤에 세미콜론이 빠져 있습니다. 이렇게 하면 컴파일러는 Point 뒤에 다른 토큰을 예상하게 되고, 에러를 보고하게 됩니다. 이 에러를 해결하려면 헤더 파일에 세미콜론을 붙여주면 됩니다.
즉, 다음과 같이 수정하면 됩니다.
// Mytest.h
typedef struct {
int x;
int y;
} Point; // no error
이렇게 하면 컴파일러는 Point 를 정상적으로 인식하고 에러가 발생하지 않습니다. 헤더 파일의 문제에 대해 써보았습니다. 이해가 되셨을까요?
마무리
이 글에서는 C2143 에러에 대해 알아보고, 이 에러가 발생하는 두 가지 경우와 해결 방법을 설명했습니다. C2143 에러는 컴파일러가 특정 토큰을 예상했는데 다른 토큰을 발견했을 때 발생하는 구문 오류입니다. 변수 선언을 잘못한 경우나 헤더 파일의 문제로 인해 발생할 수 있습니다.
이 에러를 해결하려면 변수 선언을 함수의 시작 부분으로 옮기거나 헤더 파일에 세미콜론이나 괄호 등의 토큰이 빠지지 않도록 주의해야 합니다. 이 글이 C2143 에러를 해결하는데 도움이 되었으면 좋겠습니다. C 언어를 공부하시는 분들께 유익한 정보가 되었기를 바랍니다.
감사합니다.
관련글
#include <stdio.h>에서 오류가나올때
clion, devc++ 일단 기준은 VScode로 애드온은 다 깔았는데 stdio요놈이 오류가 뜬다 MSYS2 Software Distribution and Building Platform for Windows www.msys2.org 여기서 msys2를 설치해 준다 바이러스라고 뜰 수 있으나 안
taiyokara.tistory.com
[Eclipse] 이클립스 자바스크립트 Syntax Highlighting 와 텍스트로만뜰때 설정법
taiyokara블로그 기능이 작동되지않습니다 ㅠㅠ Eclipse에서 JavaScript 코드를 작성할 때 구문 강조 표시는 키워드, 변수 및 함수와 같은 다양한 유형의 코드 요소를 빠르게 식별하는 데 도움이 되는
taiyokara.tistory.com