Mal ganz ehrlich, egal wie der Code formatiert ist gibt es durch den Mix aus normalem Code, den der Compiler interpretiert und Präprozessor-Code, den der Präprozessor interpretiert eine erhebliche Verschlechterung der Lesbarkeit.
Mir persönlich fällt es einfach sehr schwer Code zu lesen, der ständig von Blöcken unterbrochen wird, die nur bedingt compiliert werden und ich weiß, dass das anderen auch so geht weshalb es allgemein als schlechter Stil gilt, wenn man unnötig den Präprozessor strapaziert. Wenn das bei dir anders ist, ist das ja schön aber das steht halt einfach im Gegensatz zur allgemein vorherrschenden Meinung unter Entwicklern.
Siehe z. B. auch:
- c++ - Why are preprocessor macros evil and what are the alternatives? - Stack Overflow
- c# - Quote needed: Preprocessor usage is bad OO practice - Stack Overflow
Das Syntax-Highlighting zeigt mir vielleicht welcher Block mit meiner aktuellen Config aktiv ist, aber das verhindert eben nicht, dass man die Auswirkungen von Änderungen auf inaktive Blöcke gerne übersieht bzw. nicht einmal compile-testet.
Genau! Und man kann die Kombinationen in der Config auch kaum testen, weil es eine Vielzahl von Abhängigkeiten zwischen den einzelnen Config-Optionen gibt, die nirgends abgebildet sind. Das heißt man muss im Voraus irgendwoher wissen oder aufwendig recherchieren wie die Optionen zusammenhängen. Genau da kommt Kconfig wieder ins Spiel. Dort werden die Abhängigkeiten zwischen den Optionen abgebildet und berücksichtigt. Das geht theoretisch so weit, dass man Compile-Tests mit einer randomisierten Config machen kann um sicherzustellen, dass alle Kombinationen zumindest korrekt compilieren.
Das ist sicher eine gute und sinnvolle Strategie.
Nein, eben nicht. Wir verwenden mittlerweile das Buildsystem des esp-idf SDKs. Das verwendet bereits Kconfig für die Konfiguration des SDKs und alle Abhängigkeiten sind bereits vorhanden. Dort würden sich die ESPuino-spezifischen Optionen einfach einfügen lassen.
Das sehe ich anders. Ja, wir wollen die Schwelle für nicht Software-affine Leute senken und ja, das Handling der Settings-Header ist sehr „raw“ und m. E. für diesen Personenkreis eben gerade nicht geeignet. Aber diese Diskussion gehört jetzt wieder ganz klar in Konfiguration via Kconfig und hat wenig mit dem eigentlichen Thema hier zu tun.