2012-06-14 3 views
0

을 기능 나는 implicit declaration of 'baa'를 얻을 baa(..) 기능 foo 내부. 그러나 프로토 타입 선언을 수행하는 경우 : inline int baa(int); 오류는 inline function 'baa' declared but never defined입니다. 나는 인라인 함수를 매크로 함수를 대체하기 위해 사용하고있다.기능 내부 내가 할 경우

해결 방법?

EDIT : 누가 컴파일러가 위의 오류 메시지를 주장하는지 설명 할 수 있습니까?

+0

중복의 : http://stackoverflow.com/questions/957592/functions-inside-functions-in-c –

답변

4

매크로 기능을 대체하기 위해 인라인 함수를 사용하고 있습니다.

당신은 함수 내부 함수를 정의하지 수, 당신은 단지 에게 그것들을 선언 할 수 있습니다. 그것들을 선언하면 해당 범위에서 이름을 볼 수 있지만 그 함수는 여전히 어딘가에 정의가 필요하며 다른 함수 내에서 정의 할 수 없다는 것을 알고 있습니다. 그래서 컴파일러는 으로 선언되었지만 결코 이 정의되지 않았다고 말합니다.으로 정의되었습니다.

대신 함수 inline을 전역 범위로 선언하십시오.

+0

1 : 절대적으로 올바른 : – paulsm4

+0

"전역 범위에서 함수를 인라인으로 선언하십시오"라고 말할 때'void myfunction()'또는'void myfunction() {..} '을 의미합니까? 그러나 어쨌든,이 경우,'baa'는 if-else 조건을 동적으로 depeding한다고 선언됩니다. 이것은 매크로에서 작동하지 않는 if (..) #define foo (x) .. else #define foo (y)'로 대체하려고합니다. – Jack

+0

@Jack :'void myfunction()'은 _declaration_이며,'void myfunction() {...}'은 _define_입니다. 'if' 안의'#define'은 조건문에 의해 보호받지 못하기 때문에 함수가 동적으로 선언되지 않습니다. 사실, _C 전처리 기 _는'if','else' 또는 _C 언어의 다른 구조체에 대해서는 아무것도 모릅니다 _... –

1

이 표준의 일부가 아닌 비록, 당신이 -fnested-functions

+0

흠 ... GCC 용인가요? (MinGW를 사용하고 있습니다.)'인식 할 수없는 명령 행 옵션 -fnested-functions' – Jack

+0

windows에서 gcc를 사용할 수 없습니다. 그러나 귀하의 답변은 아직 유효합니다! 고마워 +1. – Jack

1

K-가면 무도회 '의 제안이 실제로 가장 좋은 것 같다 플래그로 컴파일 할 수 있지만, 그가 실제로 문제를 지적하지 않았다.

블록에 정의 된 중첩 된 함수는 블록 내에서만 유효합니다. 일반 변수와 같습니다. if 절에 하나의 함수를 정의하고 else 절에 하나의 함수를 정의하고 각각은 해당 절 내에서 유효합니다. 그러나 if-else이 닫힌 후에도 유효하지 않습니다.

그것은 정확하게 변수와 동일합니다 :

if (a) { 
    int x = 3; 
} else { 
    int x = 4; 
} 
// x isn't valid here.