Modul:Programmieren in C/C++:Vorlage:CompilerExplorerLink/Doku

Dies ist die Dokumentationsseite für Modul:Programmieren in C/C++:Vorlage:CompilerExplorerLink

Diese Vorlage erzeugt die URL für einen Link zum Compiler Explorer.

Zur Vermeidung von

  • doppelter Datenhaltung, d.h. Code sowohl im Buch als auch im CompilerExplorer (mittels KurzLinks) zu pflegen
  • 'unnötigen' Code (wie z.B. Include-Anweisungen, Funktionsrumpf, ..) im Buch zu vermeiden und damit den Blick aufs wesentliche zu lenken.

ist hier ein LUA Modul vorhanden, bei welchen über die Übergabeparameter beim Funktionsaufruf der vollständige auszuführende Code übergeben wird. Das Modul erzeugt aus diesen Übergabeparameter eine URL zum Aufruf des CompilerExplorers. Dies ermöglicht es, sowohl den Beispielcode als auch den vollständigen Code im Buch zu pflegen. Ergänzend können über den Funktionsaufruf auch Compilerschalter, der Compiler selbst und mehrere Source-Dateien übergeben werden.

Ein typischer Aufruf dieser Vorlage sieht wie folgt aus:
{{:Programmieren in C/C++: Vorlage:CompilerExplorerLink|main_c=#include <stdio.h>
void main(){
    printf("Hello World!");
} }}
Und erzeugt folgenden HTML-Code:
https://www.godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:example.c,fontScale:14,fontUsePx:'0',j:1,lang:___c,selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'%23include+%3Cstdio%2Eh%3E%0Avoid+main%28%29%7B%0A++++printf%28%22Hello+World!!%22%29%3B%0A%7D'),l:'5',n:'0',o:example.c,t:'0')),header:(),k:50,l:'4',m:100,n:'0',o:%27%27,s:0,t:'0'),(g:!((g:!((h:tree,i:(cmakeArgs:%27%27,compilerLanguageId:___c,customOutputFilename:%27%27,files:!((editorId:1,fileId:1,filename:example.c,g:%27%27,isIncluded:'0',isMainSource:'0',isOpen:'0',langId:%27%27)),isCMakeProject:'1',j:1,newFileId:2),l:'5',n:'0',o:'Tree+%231',t:'0')),header:(),l:'4',m:50,n:'0',o:%27%27,s:0,t:'0'),(g:!((h:executor,i:(argsPanelShown:'1',compilationPanelShown:'0',compiler:cg122,compilerOutShown:'0',execArgs:___,execStdin:%27%27,fontScale:14,fontUsePx:'0',j:1,lang:___c,libs:!(),options:%27%27,source:'1',stdinPanelShown:'1',tree:1,wrap:'1'),l:'5',n:'0',o:'Executor+(C,+Tree+%231)',t:'0')),header:(),k:50,l:'4',m:50,n:'0',o:%27%27,s:0,t:'0')),k:50,l:'3',n:'0',o:%27%27,s:0,t:'0')),l:'2',n:'0',o:%27%27,t:'0')),version:4
Diese URL kann man dann in einem Link einfügen: Hello World!

Folgendes gilt es zu beachten:

  • Dateinamen und Inhalt jeder einzelnen verwendeten Datei bilden ein Schlüssel-Wert-Paar, wobei der Dateiname der Schüssel und der Dateiinhalt der Wert ist. Dabei ist zu beachten, dass Punkte in den Dateinamen durch Unterstriche (_) zu ersetzen sind, da es sonst zu einer Fehlermeldung kommt. Pipes (|) trennen die einzelnen Dateien voneinader. Wichtig: Bei mehr als einer Datei muss die Hauptdatei example.c heißen bzw. CMakeLists.txt, wenn es sich im ein CMake-Projekt handelt.
  • Doppelte geschweifte Klammern ({{ und }}) sind innerhalb des Quellcodes nicht gestattet und müssen immer durch ein Leerzeichen voneinander getrennt werden ({ { bzw. } }), da sie sonst als Anfang oder Ende einer Wiki-Vorlage interpretiert werden. Deshalb muss auch nach eine schließenden geschweiften Klammer am Ende einer Datei ein Leerzeichen oder Zeilenumbruch gesetzt werden.
  • Pipes (|) müssen im Quellcode durch {{!}} ersetzt werden, da sie sonst als Feldtrenner interpertiert werden.
  • Für den Executor Frame gibt es folgende optionale Parameter, die ebenfalls Schlüssel-Wert-Paare bilden, die ebenfalls durch Pipes voneinander getrennt werden:
    • execArgsPanelShown gibt an, ob die Execution Arguments angezeigt werden (standardmäßig false)
    • execCompilationPanelShown gibt an, ob der Compiler und die Compiler Options angezeigt werden (standardmäßig true)
    • execCompiler enthält den Namen des verwendeten Compilers (standardmäßig "cg122"):
    • execCompilerOutputShown gibt an, ob der Compiler Output angezeigt wird (standardmäßig true)
    • execArgs enthält die Execution Arguments (standardmäßig ___)
    • execStdin enthät den Stdin (standardmäßig "" (ein leerer String))
    • execCompilerOptions wird für die Compiler-Optionen verwendet (standardmäßig "" (ein leerer String))
    • execStdinPanelShown gibt an, ob das Stdin angezeigt wird (standardmäßig false)
    • execLineWrap gibt an, ob es einen automatischen Zeilenumbruch gibt (standardmäßig false)
  • Wenn man CMake verwendet, sind die folgenden Optionen wichtig, die auch wieder Schlüssel-Wert-Paare bilden, die durch Pipes voneinander getrennt werden:
    • isCMakeProject gibt an, ob es sich im ein CMake-Projekt handelt (standardmäßig false)
    • CMakeArgs enhält die CMake Arguments (standardmäßig "" (ein leerer String))
    • CMakeCustomOutputFilename enthält den Namen der Ausgabedatei (standardmäßig "" (ein leerer String))
  • Folgende Bibliotheken sind dem Compiler Explorer bekannt und können ebenfalls verwendet werden, in dem man aus Schlüssel-Werte-Paare aus den Namen und der Versionsnummer (mögliche Versionen in Klammern angegeben) bildet: cs50 (910), hedley (v12), libuv (1370,1381), lua (535,540), nsimd(22-x86_64,22-arm,22-arm64,310-x86_64,310-arm,310-arm64), openssl (111c,111g), python (359,3610,376,381), simde (trunk), curl(7831), sqlite (3400).