Forum: PC-Programmierung Frage zu inline und __inline in C und C++


von Marcel R. (Gast)


Lesenswert?

Hallo,
habe mir in ein Projekt, was ich unter Windows in CVI erstelle, fertige 
Bibliotheken und Header eingebungen. Hier ein Ausschnitt:
1
__inline PAdsDatatypeEntry AdsDatatypeStructItem(PAdsDatatypeEntry p, unsigned short iItem)
2
{
3
  unsigned  short i;
4
  PAdsDatatypeEntry  pItem;
5
  if ( iItem >= p->subItems )
6
    return NULL;
7
  pItem = (PAdsDatatypeEntry)(((unsigned char*)(p+1))+p->nameLength+p->typeLength+p->commentLength+3+p->arrayDim*sizeof(AdsDatatypeArrayInfo));
8
  for ( i=0; i < iItem; i++ )
9
    pItem = (PAdsDatatypeEntry)(((unsigned char*)pItem)+pItem->entryLength);
10
  return pItem;
11
}
In C++ (Visual Studio) kann ich damit arbeiten, in C (mit CVI) kommt 
folgender Fehler: "[...] syntax error; found 'identifier' expecting ';'.

Wenn ich die beiden Unterstriche vor inline weglasse, kommt der Fehler 
nicht mehr.

Hier (http://msdn.microsoft.com/de-de/library/z8y1yy88.aspx) steht 
folgendes: "The inline keyword is available only in C++. The __inline 
and __forceinline keywords are available in both C and C++. For 
compatibility with previous versions, _inline is a synonym for 
__inline."
Bei mir muss es also so funktionieren, wie es im Originalen ist. Macht 
auch Sinn, weil der Hersteller sagt, es geht in C und C++.

Das verstehe ich nun nicht. Warum geht bei mir in C nur das, was 
eigentlich nur in C++ funktionieren sollte?

Wenn ich den inline-Teil komplett auskommentiere, funktioniert mein 
rogramm trotzdem, d.h. noch wird diese Definition nicht gebraucht, weiß 
aber natürlich nicht, was passiert, wenn es gebraucht wird. Kann mir das 
jemand erklären?

von Yalu X. (yalu) (Moderator)


Lesenswert?

inline ohne Unterstriche ist in C99 und C11 korrekt. Wenn in MSDN
steht, man solle inline nicht verwenden, sondern stattdessen das Makro
__inline oder _inline, liegt das daran, dass der MS-C-Compiler noch
auf dem Stand von vor über 20 Jahren ist, wo das inline-Schlüsselwort
noch nicht standardisiert war und stattdessen mit MS-spezifischen
Erweiterungen herungetrickst wurde. Der CVI-Compiler scheint wohl etwas
aktueller zu sein.

von Marcel R. (Gast)


Lesenswert?

also heißt das, dass diese Aussage von MSDN nur für das C-Programmieren 
in Visual Studio gilt? Visual Studio unterstützt doch eigentlich gar 
kein C, sondern nur C++, oder?

von Sven P. (Gast)


Lesenswert?

Doch, es unterstützt auch C. Kannst du umstellen, ist allerdings 
Steinzeit-C, wie Yalu schon bemerkte.

Und ja, __inline gilt nur für den VC-Compiler. Vielleicht heißt es bei 
anderen Compilern ähnlich, das ist aber dann eher Zufall.

von Klaus W. (mfgkw)


Lesenswert?

Und vor allem: Nicht MS fragen, wenn man wissen will, was Standard ist.
Man diskutiert ja auch nicht Blinden über Dürers Bilder.

von Arc N. (arc)


Lesenswert?

Klaus Wachtler schrieb:
> Und vor allem: Nicht MS fragen, wenn man wissen will, was Standard ist.

Herb Sutter gibt u.a. auch definitive Antworten was die unterstützten 
Standards betrifft
http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

Ansonsten darf man sich auch gerne bewerben und mitarbeiten.
http://blogs.msdn.com/b/vcblog/archive/2012/06/01/10313804.aspx

> Man diskutiert ja auch nicht Blinden über Dürers Bilder.

Warum nicht?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Arc Net schrieb:
> Herb Sutter gibt u.a. auch definitive Antworten was die unterstützten
> Standards betrifft

Schön gewunden, und geschickt zwei Programmiersprachen 
durcheinandergewürfelt, damit es bloß nicht auffällt.

MS kennt kein C neuer als C90, und hat auch nicht vor, das zu ändern.

Was C++ angeht, ist MS hingegen mittlerweile aus der alten 
Verweigerungsecke rausgetreten und hat mitbekommen, daß es Standards 
gibt.

Aber C++ ist eben eine andere Programmiersprache als C.

von frame (Gast)


Lesenswert?

#ifdef __cplusplus

 #define __inline  inline
#else
 #define __inline
#endif

von Rolf Magnus (Gast)


Lesenswert?

Arc Net schrieb:
> Herb Sutter gibt u.a. auch definitive Antworten was die unterstützten
> Standards betrifft
> http://herbsutter.com/2012/05/03/reader-qa-what-ab...

Da heißt es:
"The short answer is that Visual C++’s focus is to support ISO C code 
that is supported by ISO C90 or ISO C++ (98 or 11)"

Das ist aber falsch, denn C90 ist kein ISO C. Das war es mal bis vor 
13 Jahren. Im Vorwort von C99 ist zu lesen:

"This second edition cancels and replaces the first edition, ISO/IEC 
9899:1990, [...]"

> Ansonsten darf man sich auch gerne bewerben und mitarbeiten.
> http://blogs.msdn.com/b/vcblog/archive/2012/06/01/...

Da steht kein Wort von C. Es geht ausschließlich um C++.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.