#pragma und die Compiler
-
Hi,
ich benutz sehr gern im Quellcode #pragma zum linken, für Compiler/Linker-Einstellungen und co. und natürlich für Include-Guards.
Da jedoch #pragma recht Compiler-spezifisch ist und ich gerne meine Programme später auch für Macs und Linuxe compilieren will, ergeben sich daraus ein paar Fragen für mich - um in Zukunft keine Probleme zu haben bei der portierung.
Ich möchte gerne wissen, ob folgende #pragma's auf dem aktuellen GCC/G++ funktionieren oder ob es dazu andere Alternativen gibt, die man aus dem Code heraus benutzen kann.
"Include-Guard": #pragma once
"Libs linken": #pragma comment (lib, "my_lib.lib")
"Start-Up": #pragma comment (linker, "/ENTRY:mainCRTStartup")Danke euch im voraus.
-
wenn deine codes compilerunabhängig sein sollen, dann musst du auf 'pragmas' ganz verzichten...
-
vista schrieb:
wenn deine codes compilerunabhängig sein sollen, dann musst du auf 'pragmas' ganz verzichten...
ist doch voll scheisse
Naja voll nicht, nur sie sollen zwischen VC++ und GCC/G++ laufen.
-
Naja, #pragma once funktioniert meines Wissen auch unter GCC. Es gibt sozusagen Quasistandards. Weil manche Sachen einfach nützlich sind.
Aber es ist halt nicht garantiert.
Warten wir den Standard Post-C++2009 ab, da werden wir die Headers und komischen Libs los. Aber dauert leider noch sehr lange.
-
Pragmatiker schrieb:
vista schrieb:
wenn deine codes compilerunabhängig sein sollen, dann musst du auf 'pragmas' ganz verzichten...
ist doch voll scheisse
eigentlich nicht weil das so nicht stimmt
Pragmatiker schrieb:
Naja voll nicht, nur sie sollen zwischen VC++ und GCC/G++ laufen.
#pragma die ein compiler nicht kennt ignoriert er bzw gibt bestenfalls eine warnung aus , dafuer is das pragma da, eben bestimmte compiler sachen verewnden zu koennne, am copilieren hinderts dich nicht
-
Da hast du Recht. Nur gibts solche Sachen wie #pragma once, die halt bei einem "links liegen lassen" es nicht bei einem Warning belassen. Weil das ganze nämlich Nachfolgefehler nach sich zieht. Klar, das eine unbekannte pragma hindert nicht das Fortschreiten des Buildprozesses, aber was "danach" kommt, wird vielleicht sein blaues Wunder erleben.
-
die meisten compiler haben fest definierte konstanten, an denen man sie erkennen kann, so dass man seine #pragmas zielgerichtet unterbringen kann:
#ifdef __COMPILER_1__ #pragma dieses #elif __COMPILER_2__ #pragma jenes #else #error "sorry, this code needs COMPILER1 or COMPILER2." #endif