2017-12-21 9 views
-1

Ich habe bekannt geschachtelte Funktionen werden als Erweiterung in gcc unterstützt, aber ich kompiliere eine c-Datei verschachtelte Funktion mit einem Fehler verwendet. Fehler Massage ist wie folgt:Es gibt einen Fehler beim Kompilieren einer c-Datei verwendet eine verschachtelte Funktion

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

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

Und verschachtelte Funktion ist wie folgt:

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

Mein Betriebssystem ist Mac OS und Version 10.12.6

Als ich gcc -v eingeben in iTerm2, die Antwort lautet wie folgt:

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: * "Im Gegensatz zur Funktionsdeklaration sind Funktionsdefinitionen nur im Dateibereich erlaubt (es gibt keine verschachtelten Funktionen)." * – UnholySheep

+2

clang unterstützt keine verschachtelten Funktionen, Sie brauchen gcc. –

+3

Apples "gcc" ist nur ein Alias ​​für 'clang'. – molbdnilo

Antwort

0

Sie sind eigentlich wir mit Clang, nicht gcc.

Hinweis Dieses

Apple LLVM version 9.0.0 (clang-900.0.38)

Von the clang website, Clang vs GCC (GNU Compiler Collection)

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 Sie alle.Ich habe gerade angefangen zu kontaktieren c. – tinyfeng

Verwandte Themen