In meinem C-Code möchte ich statische Variablen durch Inline-Funktionen offenlegen, und auf diese Weise vermeiden Sie 'extern' Attribut, Art von OOP in Standard C. Allerdings kann ich es nicht kompilieren. Betrachten Sie den folgenden Code ein:statische Variable durch eine Inline-Funktion freilegen
[[email protected] snippets]$ cat object.h
inline int get_value(int index);
[[email protected] snippets]$ cat object.c
#include "object.h"
static int data_array[32];
inline int get_value(int index) {
return data_array[index];
}
[[email protected] snippets]$ cat app.c
#include "object.h"
void main(void) {
int datum;
datum=get_value(8);
}
[[email protected] snippets]$ gcc -c object.c
object.c:5:9: warning: ‘data_array’ is static but used in inline function ‘get_value’ which is not static
return data_array[index];
^
[[email protected] snippets]$ ls -l object.o
-rw-rw-r-- 1 niko niko 976 Aug 30 15:56 object.o
[[email protected] snippets]$ gcc -c app.c
In file included from app.c:1:0:
object.h:1:12: warning: inline function ‘get_value’ declared but never defined
inline int get_value(int index);
^
[[email protected] snippets]$ ls -l app.o
-rw-rw-r-- 1 niko niko 1368 Aug 30 15:56 app.o
[[email protected] snippets]$ gcc -o app app.o object.o
app.o: In function `main':
app.c:(.text+0xe): undefined reference to `get_value'
collect2: error: ld returned 1 exit status
[[email protected] snippets]$
Ist es möglich, statische Variablen zugreifen irgendwie wurden sie durch eine Inline-Funktion außerhalb der Datei erklärt, dass in jedem C-Datei inlined würde es verwendet wird? Natürlich kann ich erklären, nur die Variable ‚extern‘:
extern int data_array[];
und direkt verweisen, aber ich mag sie durch eine Funktion tun OOP in C von einem Funktionsaufruf ohne den Aufwand zu simulieren.
C11 Norm-Entwurf n1570: * 6.7.4 Funktion Bezeich 3 Eine Inline-Definition einer Funktion mit externer Bindung ist keine Definition eines modifizierbar enthalten Objekt mit statischer oder Thread-Speicherdauer, und darf keinen Verweis auf einen Bezeichner mit interner Verknüpfung enthalten. * – EOF
@EOF zu schlecht ... Ich frage mich, wie Menschen OOP in C durch Inline-Funktionen simulieren? die einzige brauchbare Alternative wären Makros, denke ich ... – Nulik
Ich sehe nicht, wie ein Makro in irgendeiner Weise helfen würde. Ich bin mir nicht sicher, warum Sie darauf bestehen, dass die Funktionen inline sind. – EOF