2017-01-02 8 views
0

나는 clang에 GCC 중첩 함수를 포팅하려고합니다. gcc 중첩 함수는 clang에서 지원되지 않으므로 대신 c-block을 사용해야합니다.Clang C 블록 : 호출 후 블록 함수 정의

하지만 블록 정의를 호출 한 후 원한다.

foo(){ 
    auto void bar (void); 
    ... 
    bar() 
    ... 
    void bar(void) { 
    ...some stuff 
    } 
} 

당신은 내가 C 블록 연타 기능이 작업을 수행 할 수 있습니다

그래서 GCC에서 나는이 의사 코드가 (코드 MACRO에서 생성되고 난이 순서를 정렬 할 수 없기 때문에 나는이 순서가 필요합니다) ?

이 코드는

int main() { 
    void (^hello)(void); 

    hello = ^(void){ 
    printf("Hello, block!\n"); 
    }; 

    hello(); 
    return 0; 
} 

잘 작동하지만 다음 코드

int main() { 
    void (^hello)(void); 

    hello(); 

    hello = ^(void){ 
    printf("Hello, block!\n"); 
    }; 

    return 0; 
} 

는 segfault의 실패했습니다.

+1

[C의 휴대용 중첩 기능] (http://stackoverflow.com/questions/12214867/portable-nested-functions-in-c) 또는 [Clang에 중첩 기능이있는 GCC 정리 매크로 다시 작성] (http://stackoverflow.com/questions/24959440/rewrite-gcc-cleanup-macro-with-nested-function-for-clang) – Stargateur

답변

0

두 번째 예에서는 hello이 정의되지 않았으므로 정의되지 않은 기호입니다. 컴파일러에게 무엇을 말해야합니까? 무엇인가를 사용하기 전에 말입니다.

의사 코드에서 함수 프로토 타입은 "나중에 정의 될 것입니다"라는 컴파일러에게 오류를 알리는 모든 것을 앞세웁니다.