Frage zu inline und __inline in C und C++

Gast #2763419
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?
Moderator #2763539
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.
Gast #2763891
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.
#2764129
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?
Persönliche Seite #2764172
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.
Gast #2764287
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++.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren