2 Stimmen

Objektorientiertes ANSI C?

Mögliches Duplikat:
Können Sie objektorientierten Code in C schreiben?

Ich frage mich, ob es möglich ist, striktes ANSI C als objektorientierte Sprache zu verwenden. Und wenn es möglich ist, wie kann ich eine Klasse in ANSI C erstellen. Obwohl die Sprache nicht für OO ausgelegt ist, möchte ich das unbedingt ausprobieren.

Für Beispiele, Links usw. sind wir dankbar.

0 Stimmen

Etwa eine Million Duplikate, darunter stackoverflow.com/questions/2181079/

0 Stimmen

Warum wollen Sie das tun, wenn es doch C++ gibt?

7voto

Brian R. Bondy Punkte 325712

C bietet keine direkte Unterstützung für OO über Klassen, aber man kann sie leicht emulieren.

Die Grundlagen, wie dies zu tun ist, dass Sie eine Struktur, die Ihre Daten-Mitglieder und eine zugehörige Liste von Funktionen, die einen Zeiger auf diese Struktur als ersten Parameter nimmt hält machen kann.

Weitere Informationen

0 Stimmen

Sie müssen wissen, dass es sich um eine Fälschung handelt - warum antworten Sie?

0 Stimmen

@Neil: Ich bin mir nicht sicher, aber ich habe meine Obergrenze vor etwa 4 Stunden erreicht, falls du dich wunderst.

0 Stimmen

Vielleicht sollten Sie dann etwas Selbstreflexion üben und dafür stimmen, diese Frage als Betrug abzuschließen.

4voto

Reinderien Punkte 8077

Das ist durchaus möglich, auch wenn ich es nicht gerne mache. Eine der beliebtesten Arten von objektorientiertem C findet sich in der GObject-Architektur, die in Gnome verwendet wird. Der Artikel (und weitere Lektüre über GObject) sollte Ihnen einige Ideen geben:

http://en.wikipedia.org/wiki/Gobject

0 Stimmen

Sehen Sie sich auch einige GTK-Quellen an, wie zum Beispiel GtkButton, sie sind einfach zu verstehen, wie OO in C implementiert werden kann.

3voto

t0mm13b Punkte 33393

Eine Struktur kann Methoden und Variablen enthalten, so dass

struct myStructFoo{
    int fooBar();
    int privFooBar;
};

Das ist, wie Sie ein OO "Ding" mit einem einfachen alten ANSI C-Compiler ableiten, wenn Sie die volle OOP mit C + + lernen wollen, werden Sie besser mit einem ANSI C + + Compiler, wie das ist eine bessere Passform für Ihre Bedürfnisse ... als die OOP-Stil mit einer C-Sprache ist.... sehen Sie es so, sicher können Sie ein Objekt mit einem struct verwenden, aber der Name ist nicht genau ... intuitiv ... als ein struct dient eher der Speicherung von Feldern und ist Teil integraler Datenstrukturen wie verkettete Listen, Stapel, Warteschlangen usw. Wenn Sie einen ANSI C++ Compiler hätten, würde er folgendermaßen aussehen:

class myFoo{
  public: 
     int fooBar();
  private:
     int privFooBar;
};

Vergleichen Sie und sehen Sie, wie es intuitiver erscheint, Information Hiding wird über die public y private Schlüsselwörter.

1voto

In der Tat gibt es derzeit ein Projekt mit der Bezeichnung OOC-Sprache eine Sprache wie C zu schreiben, die objektorientiert ist. Sie unterscheidet sich geringfügig von C und ist daher überhaupt nicht Objects in C. Ich persönlich habe sie nie benutzt - für meinen Geschmack weicht sie zu weit von C ab, aber vielleicht ist sie einen Blick wert.

Interessanterweise wird "OOC" vor der Kompilierung in C übersetzt. Es könnte sich lohnen, einen Blick darauf zu werfen, wie es dies erreicht, da es effektiv Objekte in C konvertiert. Ich vermute, dass dies geschieht, wie andere Poster erwähnt haben (Strukturzeiger usw.), obwohl ich es mir wieder nicht angeschaut habe.

0voto

KevinDTimm Punkte 14006

Sozusagen. Denken Sie daran, dass C++ und Objective-C beide einmal mit Präprozessoren für den C-Compiler behandelt wurden. am Ende werden Sie einfach C++ neu schreiben

0 Stimmen

Ob dies zutrifft, hängt davon ab, wie Sie "Präprozessor" definieren. Der cfront C++-Compiler war ein echter Compiler, der C als Objektcode ausgab. Er war kein Makro-Präprozessor wie (zum Beispiel) der C-Präprozessor.

1 Stimmen

Tomato, tomahto :) es ist immer noch ein Präprozessor.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X