본문 바로가기

프로그래밍언어/C언어[Error]28

[C언어][Error] 028. expected expression before ‘)’ token – 괄호 앞에 식이 없음 이 오류는 괄호 내부에 들어가야 할 표현식(expression)이 누락되었거나, 괄호 앞에 문법적으로 잘못된 요소가 있을 때 발생합니다. 특히 조건문이나 반복문에서 괄호만 쓰고 내부에 조건식을 넣지 않았을 경우, 컴파일러는 괄호 앞 또는 안에 유효한 표현식을 기대하다가 오류를 출력하게 됩니다. 예를 들어 if (), while () 처럼 괄호 안이 비어 있거나, 매크로/함수 호출에서 괄호가 열리고 닫히기만 하고 그 사이에 아무 값도 없을 경우에도 이 오류가 발생할 수 있습니다. ● 오류 예제#include int main() { if () { // 오류: 조건식이 없음 printf("조건문 실행\n"); } return 0;}컴파일 시 다음과 같은 오류 메시지가 출력됩니다... 2025. 4. 24.
[C언어][Error] 027. invalid use of void expression – void 값을 연산에 사용하려 함 이 오류는 반환형이 void인 함수를 연산식 또는 대입문에 사용하려 할 때 발생합니다. void 함수는 값을 반환하지 않으므로, 그 결과는 변수에 저장하거나 다른 값과 연산에 사용할 수 없습니다. 특히 printf와 같은 함수 안에 void 함수를 넣거나, void 함수의 결과를 대입하려 할 때 자주 발생합니다. ● 오류 예제#include void greet() { printf("Hello\n");}int main() { int x = greet(); // 오류: void 함수는 값을 반환하지 않음 return 0;}또는 다음과 같이 void 함수의 결과를 연산에 사용하려고 하면 오류가 발생합니다.int y = greet() + 1; // 오류 발생컴파일러는 다음과 같은 오류 메시지.. 2025. 4. 24.
[C언어][Error] 026. storage size of ‘variable’ isn’t known – 변수의 크기를 알 수 없음 이 오류는 변수 선언 시 컴파일러가 해당 타입의 메모리 크기를 결정할 수 없을 때 발생합니다. 특히 구조체나 typedef로 선언만 해놓고 정의하지 않은 타입을 변수로 선언하면, 컴파일러는 메모리 크기를 계산할 수 없어 오류를 발생시킵니다. 이는 선언만 있는 불완전한 타입(incomplete type)에 변수를 선언하려고 할 때 자주 발생하는 오류입니다. ● 오류 예제// file1.htypedef struct Node Node;// file2.c#include "file1.h"int main() { Node n; // 오류: Node는 정의되지 않음 return 0;}위 코드에서 Node는 typedef로 선언만 되어 있고, 구조체의 실제 정의가 없기 때문에 크기를 계산할 수 없습니다. 컴.. 2025. 4. 24.
[C언어][Error] 025. function returning array is not allowed – 함수가 배열을 반환하려 함 C언어에서 함수는 배열 자체를 직접 반환할 수 없습니다. 배열은 함수 내부에서 선언되면 지역적으로 존재하며, 함수가 종료되면 메모리에서 소멸됩니다. 따라서 배열을 반환하는 시도는 컴파일 오류로 이어집니다. 배열을 반환하려면 배열 자체가 아닌 배열의 포인터를 반환하거나, 전역(static) 배열을 사용하거나, 호출자가 전달한 배열에 값을 채우는 방식 등을 사용해야 합니다. ● 오류 예제// 잘못된 예시int[] getArray() { int arr[3] = {1, 2, 3}; return arr; // 오류 발생}이 경우 컴파일러는 배열을 반환하는 것이 불가능하다고 판단하여 다음과 같은 오류를 출력합니다.error: function cannot return array type ‘int[3]’ .. 2025. 4. 24.
[C언어][Error] 024. function returning function is not allowed – 함수가 함수를 반환하려 함 이 오류는 C언어에서 함수가 다른 함수를 직접 반환하려고 할 때 발생합니다. 하지만 C언어 문법상 함수가 또 다른 함수를 반환하는 것은 허용되지 않습니다. 함수는 값을 반환하거나, 함수 포인터를 통해 다른 함수에 대한 접근만 가능해야 합니다. 개념적으로는 함수가 함수처럼 보이는 무언가를 반환하고 싶을 때가 있지만, 이러한 경우에는 반드시 함수 포인터를 사용해야 합니다. ● 오류 예제// 잘못된 선언 예시int foo() { return bar(); // bar가 함수이고, foo도 bar를 반환하고자 함 (잘못된 의도)}// 오류 선언 예시int bar()() { // 문법적으로 허용되지 않음 return 0;}위와 같은 구조는 컴파일러가 인식할 수 없는 함수 타입이며, 다음과 같은 오류를.. 2025. 4. 24.
[C언어][Error] 023. called object is not a function or function pointer – 함수나 함수 포인터가 아닌 것을 호출 이 오류는 괄호()를 이용해 함수를 호출하려 했지만, 해당 식별자가 실제 함수나 함수 포인터가 아닌 경우 발생합니다. 즉, 함수가 아닌 변수나 자료형에 괄호를 붙여 호출하려 하면 컴파일러는 이를 호출할 수 없다고 판단합니다. 자주 발생하는 상황은 함수 이름을 실수로 변수명으로 사용하거나, 함수 포인터가 아닌 일반 변수를 함수처럼 사용하려 했을 때입니다. ● 오류 예제#include int main() { int x = 10; x(); // 오류: x는 함수가 아님 return 0;}컴파일 시 다음과 같은 오류가 출력됩니다.error: called object is not a function or function pointer ● 해결 방법함수 호출 시 사용된 식별자가 실제 함수 또는 함.. 2025. 4. 24.