Forum: PC-Programmierung Ausführbarer Code im Header


von Martin M. (ats3788)


Lesenswert?

Hallo
Ich komme aus der Pascal WElt und habe C++ so gelernt das ich µC 
programmieren kann. Ich bin da nicht gut aber ein NOOP bin ich auch 
nicht mehr.
Meine Frage in der Arduino Welt hat man ob Libraries wo im header Code 
verarbeitet wird, das ist doch im Standard C99 nicht erlaubt oder 
verpasse ich da was, weil der Compiler mit redefinition nervt und
Kontanten werden im main.cpp definiert (PlatformIO) wo dann Subroutinen 
zugreifen sollen, geht so etwas?
Eine schöne Woche wünsche ich euch.

von mech (Gast)


Lesenswert?

Wow. Ich hab deinen Beitrag 3x gelesen und kann absolut nicht erkennen, 
was deine Frage ist.

von cppbert (Gast)


Lesenswert?

Ja, absolut keinen Ahnung - bitte nicht den Gedankenfluss Tippen - das 
versteht keiner

von Oliver S. (oliverso)


Lesenswert?

Egal, was du eigentlich fragen wolltest, das Zauberwort heißt inline.

Oliver

von A. S. (Gast)


Lesenswert?

Header sind nur Quelltextfragmente in anderen Dateien. Dort kannst Du 
machen, was Du willst, jedenfalls das gleiche wie in C Dateien.

Probleme entstehen erst, wenn Du damit Code mehrfach in einer 
Übersetzungseinheit stehen hast, der nur einmal da sein darf. Z.b static 
int i;

Oder wenn in verschiedenen Files etwas steht, was nur einmal da sein 
darf, z.b.bint i; (Beispiele auf File-scope)

von Pandur S. (jetztnicht)


Lesenswert?

Der C-Header ist fast dasselbe wie die interface section in einem Delphi 
program. Da sind nur definitionen und globales Zeug.

von Einer (Gast)


Lesenswert?

Joggel E. schrieb:
> Der C-Header ist fast dasselbe wie die interface section in einem Delphi
> program. Da sind nur definitionen und globales Zeug.

naja.

Da ist eher der Vergleich zu include Dateien in Pascal angebracht.

von woas i nit (Gast)


Lesenswert?

Oliver S. schrieb:
> Egal, was du eigentlich fragen wolltest, das Zauberwort heißt inline.

und die drei musketiere
1
#ifndef
2
#define
3
#endif

von Dumdi D. (dumdidum)


Lesenswert?

Die Frage zielt vielleicht auf die ODR ab?
https://en.m.wikipedia.org/wiki/One_Definition_Rule

von Markus (Gast)


Lesenswert?

Ein schönes Beispiel für "Header-Only-Code" ist die Mozzi-Library:
https://github.com/sensorium/Mozzi

Eine High-Performance Sound Library nicht nur aus Templates. Siehe 
dieses Beispiel:

https://github.com/sensorium/Mozzi/blob/master/DCfilter.h

von DPA (Gast)


Lesenswert?

Martin M. schrieb:
> Standard C99 nicht erlaubt

Martin M. schrieb:
> main.cpp

C != C++

von georg (Gast)


Lesenswert?

Joggel E. schrieb:
> Der C-Header ist fast dasselbe wie die interface section in einem Delphi
> program. Da sind nur definitionen und globales Zeug.

Das ist nur eine Empfehlung der Übersicht halber, auch die Extensions C 
und H haben eigentlich keine Funktion. Wenn man sich unbedingt 
persönlich profilieren will kann man sein ganzes C-Programm in ein 
H-File schreiben oder auch umgekehrt.

Im Gegensatz dazu haben in Pascal/Delphi die Abschnitte Interface und 
Implementation in einer Unit tatsächlich unterschiedliche Funktionen, 
aber das ist auch kein Standard-Pascal mehr.

Georg

von Tom (Gast)


Lesenswert?

Header sind reine Textersetzung. Du kannst auch sowas machen:
1
void blubb(void)
2
#include "textbausteine/geschweifteklammerauf.txt"
3
    doit()
4
#include "textbausteine/semikolon.txt"
5
#include "textbausteine/geschweifteklammerzu.txt"

von Sebastian S. (amateur)


Lesenswert?

In einer Hinsicht verhalten sich C-Header wie Pascal-Units: Nur dadurch, 
das Du sie einbindest, tut sich nichts. Außer das der Code aufgebläht 
wird.

Sowohl in Pascal als auch in C musst Du irgendwie initialisieren. 
Manchmal heißen die dazu nötigen Funktionen auch so.
Aber manchmal geht das Ganze auch ohne Initialisierung vonstatten - 
sowohl in C als auch in Pascal.

Für die Erbsenzähler: Ja, es gibt Methoden, das zu umgehen. Ist aber 
nicht üblich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.