Przeglądam notatki z kursu języka C i każdy plik źródłowy programu w języku C zaczyna się od jednego #
w pierwszym wierszu programu.
Następnie są puste wiersze, a za nimi następna main
funkcja, po której następuje funkcja.
Jaki jest powód #
?
(Teraz jest poza terminem i naprawdę nie mogę zapytać faceta.)
Oto przykład:
#
#include <stdio.h>
int main() {
printf("Hello, World!");
return 0;
}
c
c-preprocessor
Główny człowiek
źródło
źródło
#
, a następnie pusty wiersz, a następnie program.#
jest zaciemnianie. Jeśli chcesz zmylić wszystkich, możesz na przykład uruchomić wszystkie pliki źródłowe linią#//#BEGIN#\\#
(co absolutnie nic nie robi).Odpowiedzi:
Wow, ten wymóg idzie drodze powrotnej do 1970 roku.
W pierwszych dniach wstępnie znormalizowanego C, jeśli chciałeś wywołać preprocesor , musiałeś napisać
#
jako pierwszą rzecz w pierwszej linii pliku źródłowego. Pisanie tylko#
na początku pliku daje elastyczność w rozmieszczeniu innych dyrektyw preprocesora.Z oryginalnego projektu C autorstwa wielkiego Dennisa Ritchiego :
Ten dokument jest świetny do czytania (i pozwolił mi skoczyć na to pytanie jak szalony kot).
Podejrzewam, że to wykładowca jest po prostu sentymentalny - nie było to wymagane od ANSI C.
źródło
#
sam w linii, tylko że zaczyna się od#
, więc dlaczego nie przejść bezpośrednio po#include
? A może źle to rozumiem?Nic nie robi
Od standardu ISO C / C ++:
Tak więc w dzisiejszych kompilatorach ten pusty skrót nic nie robi (podobnie jak -
new-line ;
nie ma funkcjonalności).PS : W pre-standaryzowany C ,
# new-line
miał ważną rolę, był używany do wywołania C preprocesor (jak podkreślił @Bathsheba). Tak więc kod tutaj został napisany w tym czasie lub pochodzi z przyzwyczajenia.źródło
Musisz wiedzieć o procesie kompilacji C. Ponieważ to jest „musisz wiedzieć”, w jaki sposób kod źródłowy przekształca się w wykonywalny kod binarny (plik).
Z procesu kompilacji kod źródłowy C musi przejść przez sekcję preprocesora. Ale jak powiedzieć kompilatorowi, aby wstępnie przetworzył kod? ... Że symbol czasu # został wprowadzony do wskaźnika Preprocess kompilatora.
Na przykład
#define PI 3.141
jest w kodzie źródłowym. Następnie zostanie to zmienione po sesji Wstępnego przetwarzania. Oznacza to, że wszystkie PI zostaną zmienione na 3.141.W ten
#include <stdio.h>
sposób do kodu źródłowego zostaną dodane standardowe funkcje we / wy.Jeśli masz maszynę z Linuksem, skompiluj jak
gcc -save-temps source_code.c
. I zobacz wyniki kompilatora.źródło