Warum beginnen alle von meinem Dozenten geschriebenen C-Dateien mit einem einzelnen # in der ersten Zeile?

Lesezeit: 2 Minuten

Der Benutzeravatar des Main Man
Der Hauptmann

Ich gehe einige C-Kursnotizen durch, und jeder Die Quelldatei des C-Programms beginnt mit einer Single # in der ersten Zeile des Programms.

Dann gibt es Leerzeilen, und danach folgen andere Sachen, gefolgt von der main Funktion.

Was ist der Grund für die #?

(Es ist jetzt abgelaufen und ich kann den Kerl nicht wirklich fragen.)

Hier ist ein Beispiel:

#

#include <stdio.h>
int main() {
   printf("Hello, World!");
   return 0;
}

  • stackoverflow.com/questions/35207515/…

    – Lanting

    11. August 2017 um 7:19 Uhr

  • @Bathsheba Die Zeitstempel auf dem letzten zeigen, dass Sie nur eine Minute nach dem Stellen der Frage eine einigermaßen detaillierte Antwort gegeben haben, einschließlich eines relevanten Zitats aus dem C99-Referenzstandard. Du bist definitiv eine Verschwörungsperson. Möglicherweise bei den Illuminaten. Wie konnten beide Fragen so beliebt werden?

    – Nat

    11. August 2017 um 21:15 Uhr


  • Für mich ist die Popularität das Seltsame. Bei den Bearbeitungen haben Sie fünf Minuten Zeit, um die Bearbeitung korrekt vorzunehmen, und der Bearbeitungsverlauf bis zu diesem Zeitpunkt wird nicht im Verlauf angezeigt – nur der Entwurf nach fünf Minuten und die Zeit des ersten Versuchs. Die Tatsache, dass diese Frage jetzt mit der anderen verknüpft wird, wird nur dazu dienen, die Abstimmung über beide zu erhöhen.

    – Bathseba

    12. August 2017 um 5:02 Uhr


Benutzeravatar von Bathsheba
Bathseba

Wow, diese Anforderung geht Weg zurück bis in die 1970er Jahre.

In dem sehr früh Tagen von vorstandardisiertem C, wenn Sie das aufrufen wollten Präprozessordann musste man a schreiben # als erstes in der ersten Zeile einer Quelldatei. Schreiben nur a # am Anfang der Datei bietet Flexibilität bei der Platzierung der anderen Präprozessordirektiven.

Aus ein Original-C-Entwurf des großen Dennis Ritchie höchstpersönlich:

12. Compiler-Steuerleitungen

[…] Um zu verursachen [the] Damit der Präprozessor aufgerufen werden kann, muss die allererste Zeile des Programms mit # beginnen. Da Nullzeilen vom Präprozessor ignoriert werden, braucht diese Zeile keine weiteren Informationen zu enthalten.

Dieses Dokument ist großartig zu lesen (und erlaubte mir, wie eine verrückte Katze auf diese Frage zu springen).

Ich vermute, dass der Dozent einfach sentimental ist – das ist seit ANSI C definitiv nicht mehr erforderlich.

  • So wie ich es verstehe, ist die Anforderung nicht, dass das allererste Zeichen ein sein muss # auf einer eigenen Zeile, nur dass sie mit a beginnt #warum also nicht direkt für a #include? Oder verstehe ich es falsch?

    – Federico Klez Culloca

    11. August 2017 um 7:28 Uhr

  • @ Bathseba “Damit dieser Präprozessor aufgerufen wird, muss die allererste Zeile des Programms mit # beginnen. Da Nullzeilen vom Präprozessor ignoriert werden, braucht diese Zeile keine weiteren Informationen zu enthalten.„<- so ist es kann bereits eine Präprozessor-Direktive enthalten, aber es ist nicht notwendig ….

    Benutzer2371524

    11. August 2017 um 7:31 Uhr

  • Als ich 1980 anfing, in C zu programmieren, war das keine Voraussetzung. ANSI C wurde erst 1989 standardisiert.

    – Pojo-Typ

    12. August 2017 um 13:35 Uhr

  • @federico-klez-culloca Wenn es zu einem Include wird, kann die Datei ohne führendes # enden, da in Zukunft jemand ein nicht benötigtes Include löscht, ohne sich der Nebenwirkungen des führenden # bewusst zu sein.

    – Fadeway

    13. August 2017 um 1:51 Uhr

  • @Casanova – Nein. Das zu tun und eine solche Antwort zu akzeptieren, verstößt gegen die Site-Regeln. Das Fragen und Antworten unter verschiedenen Konten verstößt gegen den Geist der Regeln der Website, auch ohne gegenseitige Abstimmung, wenn Sie verstehen, was ich meine. Es schadet nicht, Ihre eigene Frage zu beantworten und diese Antwort mit demselben Konto zu akzeptieren – das habe ich in der Vergangenheit getan.

    – Bathseba

    15. August 2017 um 6:37 Uhr


Benutzeravatar von Minhas Kamal
Minhas Kamal

Es tut nichts

Ab dem ISO-Standard von C/C++:

Eine Vorverarbeitungsanweisung des Formulars

# new-line

hat keine Wirkung.

Also in den heutigen Compilern, dass leerer Hash tut nichts (wie- new-line ; hat keine Funktion).


PS: In * vorstandardisiertem C*, # new-line eine wichtige Rolle hatte, wurde es verwendet, um den C-Vorprozessor aufzurufen (wie von @Bathsheba hervorgehoben). Der Code hier wurde also entweder innerhalb dieses Zeitraums geschrieben oder stammt aus der Gewohnheit des Programmierers.


Bearbeiten: Kürzlich bin ich auf Code wie diesen gestoßen-

#ifdef ANDROID
#
#define DEVICE_TAG "ANDROID"
#define DEBUG_ENABLED
#
#else
#
#define DEVICE_TAG "NOT_ANDROID"
#
#endif /* ANDROID */

Hier sind diese leeren Hashes nur dazu da, den Code gut aussehen zu lassen. Es verbessert auch die Lesbarkeit, indem es anzeigt, dass es sich um a handelt Präprozessorblock.

Benutzeravatar von GOBI
GOBI

Sie müssen über den Kompilierungsprozess von C Bescheid wissen. Denn das ist “muss wissen”, wie der Quellcode in ausführbaren Binärcode (Datei) umgewandelt wird.

Vom Kompilierungsprozess muss der C-Quellcode die Präprozessor-Sektion passieren. Aber wie kann man dem Compiler sagen, dass er den Code vorverarbeiten soll? … Dass das Zeitsymbol # in den Indikator der Vorverarbeitung für den Compiler eingeführt wurde.

Zum Beispiel #define PI 3.141 steht im Quellcode. Dann wird es nach der Vorverarbeitungssitzung geändert. Das heißt, alle PI werden in 3.141 geändert.

Ist wie #include <stdio.h>die Standard-E/A-Funktionen werden Ihrem Quellcode hinzugefügt.

Wenn Sie eine Linux-Maschine haben, kompilieren Sie wie gcc -save-temps source_code.c. Und sehen Sie sich die Compiler-Ausgaben an.

  • Die Frage ist nicht etwa # als Präfix. Es fragt, warum Sie eine Single setzen würden # oben in jeder Datei.

    – George

    17. Februar 2021 um 7:43 Uhr

1427830cookie-checkWarum beginnen alle von meinem Dozenten geschriebenen C-Dateien mit einem einzelnen # in der ersten Zeile?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy