Objekte in C?

Gast #1454388
Lesenswert?

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
Lesenswert?

> 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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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

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