Objekte in C?

Gast #1454388
man kann sich solche sachen prima selbst schnell zusammenbasteln
habe es mal versucht

bei wenigen funktionen is das brauchbar ...
ab einer gewissen menge an funktionen bläht es aber ganz schön


zB

12k flash ohne dieses struct
12,8k flash mit dieser stuct umd zB uart.print( xxxx) zu schreiben
je größer das projekt desto größer der speicherbedarf
Gast #1454393
> Ich dachte C ist nicht objektorientiert?
OOP fängt im Kopf an, nicht in der Programmiersprache, prinzipiell sind 
Strukturen in C Klassen, da ist halt alles public. Im Linux-Kernel [1] 
arbeitet man so, die Methoden sind dann Funktionszeiger.
Ob OOP so toll ist, dass man sowas machen muss, bleibt im Auge des 
Betrachters.

[1] https://ezs.kr.hsnr.de//TreiberBuch/html//sec.technik.html
#1454426
Gast schrieb:
> ok, vielen dank.
>
> und wie setz ich soetwas selbst um?

Indem du in deinem schlauen C-Buch erst mal das Kapitel über 
Funktionspointer wieder und wieder studierst.

Danach überlegst du dir, was wohl passieren würde, wenn du einer 
Struktur neben den eigentlichen Datenfeldern ein paar Funktionszeiger 
verpasst und wie man die benutzen könnte. Und wenn du soweit bist, 
kannst du anfangen kreativ zu werden :-)
Gast #1454446
1
struct {
2
    void bar = foo_bar;
3
} foo;
4

5
void foo_bar () {
6

7
}
8

9
void main () {
10
    foo.bar();
11
}

nur bin ich mir innerhalb von struct bei void nicht sicher.. welchen typ 
muss ich denn für eine funktion angeben?
Gast #1454460
Hi,

danke für die vielen Antworten..
Dann müsste es ja folgendes tun:
1
typedef void (*voidFn)( void );
2

3
struct {
4
    voidFn bar = foo_bar;
5
} foo;
6

7
void foo_bar () {
8

9
}
10

11
void main () {
12
    foo.bar();
13
}

Klar, über den Sinn kann man streiten, aber ich finde es macht das ganze 
übersichtlicher und ich persönlich find i2c.send() einfach schöner wie 
i2c_send().. könnt auch daran liegen, dass sich ein . minimal einfacher 
tippt wie _ ;)
Gast #1454581
für die kleineren Projekte wirds reichen ;)
bei den größeren ist dann halt die Frage ob man lieber einen µC größer 
nimmt, um die bei größeren Projekten besonders wichtige Übersicht zu 
gewährleisten..

ich hab derweil übrigens im source vom arduino gesucht und bin auf die 
libraries gestoßen.. die sind in c++ geschrieben..

und auf der offiziellen seite ist auch ein tutorial, wie man selber 
libraries schreibt ;)
Gast #1457973
>bei Arduino Sketches gibt es Funktionsaufrufe wie
>Wire.begin(), Serial.begin(), Wire.recive(), ..
>Ich dachte C ist nicht objektorientiert? nanu?
Die Arduino Bibliotheken sind in C++ geschrieben. Deshalb ist die 
Objektorientiertheit kein Problem.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.