Ausführbarer Code im Header

OP #6146397
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.
Gast #6146449
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)
Gast #6147277
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
Gast #6147357
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"
#6147436
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.

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