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?