중첩 된 함수는 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
http://en.cppreference.com/w/c/language/function_definition : * "함수 선언과 달리 함수 정의는 파일 범위에서만 사용할 수 있습니다 (중첩 함수가 없음). * – UnholySheep
clang은 gcc가 필요한 중첩 함수를 지원하지 않습니다. –
애플의 "gcc"는 단지'clang'의 별명입니다. – molbdnilo