본문 바로가기
728x90

분류 전체보기404

[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.
[C언어][Error] 022. invalid suffix on literal; C requires ‘int’ – 숫자 리터럴에 잘못된 접미사 사용 이 오류는 숫자 리터럴에 C언어에서 허용되지 않는 접미사(suffix)를 붙였을 때 발생합니다. C언어는 정수 리터럴과 실수 리터럴에 사용할 수 있는 접미사를 엄격하게 제한하며, 잘못된 문자가 붙으면 문법 오류로 처리됩니다. 예를 들어, 100z 와 같은 표현은 z가 유효한 접미사가 아니기 때문에 이 오류가 발생합니다. 정수 리터럴에는 u, l, ul 등의 조합만 사용할 수 있으며, 대문자와 소문자도 구분됩니다. ● 오류 예제#include int main() { int x = 100z; // 오류: 잘못된 접미사 z printf("%d\n", x); return 0;}컴파일러는 다음과 같은 오류 메시지를 출력합니다.error: invalid suffix "z" on integer co.. 2025. 4. 24.
[C언어][Error] 021. a label can only be part of a statement and a declaration is not a statement – 선언문에서 레이블 사용 불가 이 오류는 C언어에서 레이블(label)을 잘못된 위치, 특히 선언문 앞에 사용했을 때 발생합니다. C언어에서 레이블은 반드시 실행 가능한 문(statement)에만 붙일 수 있으며, 변수 선언과 같은 선언문(declaration)에는 사용할 수 없습니다. 레이블은 보통 goto 문과 함께 사용되며, 프로그램의 흐름을 특정 위치로 점프하게 할 때 사용됩니다. 이때 레이블이 선언문에 붙어 있으면 컴파일러가 실행 흐름을 명확히 해석할 수 없기 때문에 오류를 발생시킵니다. ● 오류 예제#include int main() { goto label; label: int x = 10; // 오류: 선언문 앞에 레이블 사용 printf("%d\n", x); return 0;}컴파일 시 다음과 같.. 2025. 4. 24.
[C언어][Error] 020. initializer element is not constant – 초기화 값이 컴파일 타임 상수가 아님 이 오류는 전역 변수 또는 정적(static) 변수의 초기화 값이 컴파일 시간에 결정될 수 없는 경우 발생합니다. C언어에서는 이러한 변수들을 초기화할 때 반드시 **컴파일 타임 상수(constant expression)** 를 사용해야 하며, 실행 중 계산되는 값은 사용할 수 없습니다.예를 들어, 지역 변수의 값이나 함수의 반환값, 포인터 역참조 값 등을 전역 변수의 초기값으로 설정하면 이 오류가 발생합니다.● 오류 예제int getValue() { return 42;}int x = getValue(); // 오류: 함수 반환값은 상수가 아님또는 아래와 같이 지역 변수로부터 값을 받아 초기화할 수도 없습니다.int size = 5;int arr[size] = {1, 2, 3, 4, 5}; //.. 2025. 4. 24.
728x90