extern "C" extern foo()
-
Hallo,
ich habe eine Funktion, die ich doppelt externen muss.
extern "C" extern foo();Hier meckert aber der Compiler:
error: invalid use of ‘extern’ in linkage specification
-
§7.5/7 schrieb:
A declaration directly contained in a linkage-specification is treated as if it contains the
externspecifier (7.1.1) for the purpose of determining the linkage of the declared name and whether it is a definition.
Such a declaration shall not specify a storage class.
-
Also, durch 'extern "C"' ist die ganze Funktion sowieso 'extern', und das zweite 'extern' ist überflüssig?
Habe ich das richtig interpretiert?Richtig müsste es also so aussehen:
extern "C" foo()
-
Jo.
-
Hmm, das ist aber doof.
Gibt's da vielleicht noch eine andere Lösung?Mein Problem ist, daß ich einen C-Header verwende und diesen einfach für C++ "externiere".
#ifdef __cplusplus extern "C" { #endif extern foo(); #ifdef __cplusplus } #endifDer Header wird auch von C-Dateien genutzt, weshalb ich nicht einfach das 'extern' von foo() rausschmeißen kann.
Jmd 'ne Idee?
-
#ifdef __cplusplus # define EXTERN extern #else # define EXTERN #endif?
-
olpo schrieb:
Der Header wird auch von C-Dateien genutzt, weshalb ich nicht einfach das 'extern' von foo() rausschmeißen kann.
Ist das "normale"
externnicht sowieso implizit wenn man nichtstaticdranschreibt? Zumindest in C++ ist das so und ich bin mir auch recht sicher, dass es in C auch so ist.
-
@sebi: Oh, hast recht:
C11, §6.2.2/5 schrieb:
If the declaration of an identifier for a function has no storage-class specifier, its linkage is determined exactly as if it were declared with the storage-class specifier
extern.