Ausführbarer Code im Header

OP #6146397
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 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.