Ich denke, das Erste, was Sie tun sollten, ist zu überprüfen, ob sich dies wirklich auswirkt, d.h. Sie sollten zuerst die Leistung testen. Eine der Suchanfragen bei Google hat dieses ergeben.
In den Ergebnisseiten sind die Spalten für mich leicht versetzt, aber es ist klar, dass zumindest bis VC6 Microsoft die Include-Guard-Optimierungen, die die anderen Tools verwendeten, nicht implementierte. Wenn der Include-Guard intern war, dauerte es 50-mal so lange im Vergleich zu externen Include-Guards (externe Include-Guards sind mindestens so gut wie #pragma). Aber lassen Sie uns die möglichen Auswirkungen betrachten:
Laut den vorgelegten Tabellen ist die Zeit, um das Include zu öffnen und zu überprüfen, 50-mal so hoch wie bei einem #pragma-Äquivalent. Die tatsächliche Zeit dafür betrug jedoch im Jahr 1999 1 Mikrosekunde pro Datei!
Also, wie viele doppelte Header wird ein einzelnes TU haben? Das hängt von Ihrem Stil ab, aber wenn wir sagen, dass im Durchschnitt ein TU 100 Duplikate hat, zahlen wir im Jahr 1999 potenziell 100 Mikrosekunden pro TU. Mit den HDD-Verbesserungen ist dies wahrscheinlich inzwischen erheblich niedriger, aber selbst dann ist mit vor-kompilierten Headern und korrektem Abhängigkeits-Tracking die gesamte kumulative Kosten dieses für ein Projekt fast sicher ein unbedeutender Teil Ihrer Build-Zeit.
Nun, auf der anderen Seite, so unwahrscheinlich es auch sein mag, wenn Sie jemals zu einem Compiler wechseln, der #pragma einmal
nicht unterstützt, überlegen Sie, wie viel Zeit es dauern wird, Ihre gesamte Quellcodebasis zu aktualisieren, um Include-Guards anstelle von #pragma zu haben?
Es gibt keinen Grund, warum Microsoft keine Include-Guard-Optimierung implementieren könnte, so wie es GCC und jeder andere Compiler tut (kann eigentlich jemand bestätigen, ob ihre neueren Versionen dies implementieren?). Meiner Meinung nach tut #pragma einmal
sehr wenig anderes, als Ihre Wahl eines alternativen Compilers einzuschränken.