본문 바로가기

프로그래밍언어175

[C언어][Error] 096. expected declaration specifiers or ‘...’ before string constant – 문자열 상수 앞에 선언 누락 이 오류는 함수 매개변수나 전처리 지시문 등에서 문자열 상수가 사용되었지만, 그 앞에 필요한 선언 형식이 없을 경우 발생합니다. C언어는 함수 정의에서 문자열 상수를 직접 사용하는 것이 허용되지 않으며, 특히 매개변수 위치에 선언이 누락된 경우 문법 오류로 간주됩니다.이는 보통 함수 선언에서 타입을 명시하지 않고 문자열을 직접 쓴다든지, 매크로 정의에서 구문 오류가 발생했을 때도 나타납니다.● 오류 예제#include // 오류: 매개변수 자리에 문자열 상수void greet("Hello") { printf("문법 오류 발생\n");}컴파일 시 다음과 같은 오류 메시지가 출력됩니다.error: expected declaration specifiers or ‘...’ before string cons.. 2025. 5. 10.
[C언어][Error] 095. expected expression before ‘]’ token – ] 앞에 표현식 누락 이 오류는 배열 인덱스를 사용할 때 대괄호 내부에 유효한 표현식이 없을 경우 발생합니다. 즉, [] 안에 인덱스가 빠졌거나, 인덱스가 올바른 형태의 식(expression)이 아닐 때 컴파일러가 오류를 출력합니다. 대괄호는 배열 접근 연산자로, 항상 안에 정수형 표현식이 들어가야 합니다.실수로 인덱스를 빠뜨렸거나, 인덱스를 구성하는 변수나 값이 선언되지 않았을 때 자주 발생합니다.● 오류 예제#include int main() { int arr[5] = {1, 2, 3, 4, 5}; printf("%d\n", arr[]); // 오류: 인덱스 없음 return 0;}컴파일 시 다음과 같은 오류 메시지를 출력합니다.error: expected expression before ‘]’ tok.. 2025. 5. 7.
[C언어][Error] 094. invalid type argument of unary ‘*’ – 잘못된 타입에 대해 * 연산 사용 이 오류는 포인터가 아닌 값에 대해 역참조 연산자(*)를 사용했을 때 발생합니다. C언어에서 * 연산자는 포인터가 가리키는 메모리의 값을 참조하는 용도로 사용되며, 반드시 포인터 타입에만 적용되어야 합니다.정수형 변수, 구조체, 함수의 반환값 등 포인터가 아닌 타입에 * 연산자를 사용할 경우, 컴파일러는 해당 타입이 역참조 가능한 메모리 주소가 아니라고 판단하여 오류를 발생시킵니다.● 오류 예제#include int main() { int x = 10; int y = *x; // 오류: x는 포인터가 아님 return 0;}컴파일 시 다음과 같은 오류 메시지가 출력됩니다.error: invalid type argument of unary ‘*’● 해결 방법역참조(*) 연산자는 반드시 포.. 2025. 5. 7.
[C언어][Error] 093. incompatible types when assigning to type ‘int *’ from type ‘float *’ – 포인터 타입 불일치 이 오류는 서로 다른 타입의 포인터를 직접 대입하려 할 때 발생합니다. 예를 들어 float* 타입의 포인터를 int* 타입 변수에 대입하는 경우, 컴파일러는 두 포인터 타입 간의 불일치를 감지하여 오류를 발생시킵니다. C언어에서는 타입이 명확히 맞지 않는 포인터 간의 대입은 허용되지 않습니다.포인터는 단순한 메모리 주소를 가리키는 것처럼 보이지만, 내부적으로 가리키는 데이터 타입에 따라 연산 방식과 접근 방식이 달라지므로 타입 안전성을 유지하는 것이 중요합니다.● 오류 예제#include int main() { float f = 3.14; float *fp = &f; int *ip = fp; // 오류: float* → int* 대입 불가 return 0;}컴파일 시 다음과 같은.. 2025. 5. 7.
[C언어][Error] 092. missing terminating ‘ character – 작은따옴표 누락 이 오류는 문자 상수를 표현할 때 작은따옴표(')를 열었지만 닫지 않았을 경우 발생합니다. C언어에서는 한 개의 문자를 표현할 때 반드시 작은따옴표로 열고 닫아야 하며, 'a', '\n'과 같이 작성되어야 합니다. 만약 닫는 따옴표가 없으면 컴파일러는 이를 올바른 문자로 인식하지 못해 오류를 발생시킵니다.또한, 한 글자가 아닌 여러 문자를 작은따옴표로 감싸는 경우에도 이 오류가 발생할 수 있습니다.● 오류 예제#include int main() { char c = 'a; // 오류: 닫는 따옴표 누락 return 0;}컴파일 시 다음과 같은 오류 메시지를 출력합니다.error: missing terminating ' character● 해결 방법문자 상수는 반드시 한 글자이며, 작은따옴표로 .. 2025. 5. 4.
[C언어][Error] 091. function declaration isn’t a prototype – 프로토타입이 아님 이 오류는 함수 선언이 현대 C언어 표준(C89/C99 이후)에서 요구하는 함수 프로토타입 형식이 아닐 경우 발생합니다. 함수 프로토타입이란 함수가 어떤 인자를 받는지 정확히 명시하는 선언 방식으로, 컴파일러가 타입 체크와 오류 검사를 수행할 수 있도록 도와줍니다.프로토타입이 아닌 함수 선언은 컴파일러가 인자의 타입 정보를 알 수 없게 되어, 인자 개수 및 타입이 일치하지 않아도 오류를 감지하지 못하게 됩니다. 이는 버그로 이어질 수 있어 현대 C에서는 반드시 프로토타입을 작성해야 합니다.● 오류 예제#include // 비표준 선언 (프로토타입 아님)int add(); int main() { printf("%d\n", add(3, 4)); // 컴파일러가 인자 검사 불가 return 0;.. 2025. 5. 4.