Wenn Ihre input.c
Datei einige Systemheader enthält, ist es normal, dass der Präprozessor abstürzt, wenn er sie nicht finden kann.
Sie könnten ersten grep -v
verwenden, um all #include
von System-Header in Ihrem Code zu entfernen, so etwas wie dieses Ziel zu erreichen (Liste ist nicht abschließend):
grep -vE "(stdio|stdlib)\.h" code.c > code_.c
Sie zum Beispiel erhalten:
#define EXITCODE 0
int main(){
int i = EOF;
printf("hello\n");
return EXITCODE;
}
dann Vorprozess:
S:\c>gcc -E code_.c
# 1 "code_.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "code_.c"
int main(){
int i = EOF;
printf("hello\n");
return 0;
}
zur Kenntnis, dass der prä- Der Prozessor kümmert sich nicht um nicht definierte Funktionen oder Makros. Sie erhalten Ihren Code vorverarbeitet (und Ihre Makros erweitert), nicht die systemeigenen.
Sie müssen natürlich auch alle enthaltenen Dateien verarbeiten. Das bedeutet eine zusätzliche Schicht von Werkzeugen, um temporäre Quelldateien zu erstellen und von dort aus zu arbeiten.
, um die Lösung Does [Wie führe ich den Präprozessor auf lokale Header nur?] (Https://stackoverflow.com/questions/20889460 /) Hilfe? Es ist eine Antwort auf eine C++ - Frage, aber die Ideen (und Skripte) arbeiten auch direkt mit C-Code. –
Meine eigene Lösung [unten] (https://Stackoverflow.com/a/45786694/7392560) ist viel einfacher, da ich keine leeren Dateien usw. erstellen muss. –
Ja, wenn Sie Haskell auf Ihrem Computer installiert haben, oder Sie finden eine vordefinierte Kopie, dann ist es besser, 'cpphs' zu verwenden. –