2017-12-21 36 views
-1

중첩 된 함수는 gcc에서 확장으로 지원되지만 알려진 C 파일은 오류가있는 중첩 된 함수를 사용하여 컴파일됩니다. 오류 마사지는 다음과 같이이다 :중첩 된 함수로 사용 된 c 파일을 컴파일 할 때 오류가 있습니다.

test.cpp:6:40: error: function definition is not allowed here double

square (double z) { return z * z; } 

그리고 중첩 된 함수는 다음과 같이이다 :

foo (double a, double b) 
{ 
    double square (double z) { return z * z; } 
    return square (a) + square (b); 
} 

내 운영 시스템은 맥 OS이며, 나는에 gcc -v을 입력하면 버전 10.12.6

입니다 iTerm2의 답변은 다음과 같습니다.

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 9.0.0 (clang-900.0.38) 
Target: x86_64-apple-darwin16.7.0 
Thread model: posix 
InstalledDir: /Library/Developer/CommandLineTools/usr/bin 
+3

http://en.cppreference.com/w/c/language/function_definition : * "함수 선언과 달리 함수 정의는 파일 범위에서만 사용할 수 있습니다 (중첩 함수가 없음). * – UnholySheep

+2

clang은 gcc가 필요한 중첩 함수를 지원하지 않습니다. –

+3

애플의 "gcc"는 단지'clang'의 별명입니다. – molbdnilo

답변

0

(gcc이 아니라 Clang).

공지 사항이

Apple LLVM version 9.0.0 (clang-900.0.38)

the clang website에서, 연타 GCC 대 (GNU 컴파일러 컬렉션)

GCC supports many language extensions, some of which are not implemented by Clang. For instance, in C mode, GCC supports nested functions and has an extension allowing VLAs in structs.

+0

Thx 너 모두. 나는 방금 C에게 연락하기 시작했다. – tinyfeng