Jednak nieco dziwne pytanie, jeśli dobrze pamiętam, kod źródłowy C ++ nie wymaga systemu plików do przechowywania plików.
Posiadanie kompilatora, który skanuje odręczne dokumenty za pomocą aparatu, byłoby zgodną implementacją. Chociaż praktycznie nie ma to większego sensu.
Jednak C ++ 20 dodaje teraz lokalizację źródłową z file_name
. Czy to teraz oznacza, że kod źródłowy powinien być zawsze przechowywany w pliku?
__FILE__
. Klasasource_location
po prostu pozwala ci ją pobrać na stronie wywołania funkcji.<iostream>
które mogą nie być plikami (jeśli widzisz, o co mi chodzi), a nie plikami napisanymi przez programistów?Odpowiedzi:
Nie, kod źródłowy nie musi pochodzić z pliku (ani przechodzić do pliku).
Możesz skompilować (i połączyć) C ++ całkowicie w potoku, umieszczając kompilator pośrodku, np
i tak jest od dziesięcioleci. Zobacz też:
Wprowadzenie
std::source_location
w C ++ 20 nie zmienia tego stanu rzeczy. Po prostu jakiś kod nie będzie miał dobrze zdefiniowanej lokalizacji źródłowej (lub może być dobrze zdefiniowana, ale niezbyt znacząca). Właściwie, to powiedziałbym, że nacisk na definiowaniestd::source_location
za pomocą plików jest nieco krótkowzroczny ... chociaż w sprawiedliwości, to jest po prostu mniej makro odpowiednik__FILE__
i__LINE__
które już istnieją w C ++ (i C).@ HBv6 zauważa, że jeśli wypiszesz wartość
__FILE__
podczas kompilacji przy użyciu GCC ze standardowego strumienia wejściowego:uruchamianie wynikowych wydruków wykonywalnych
<stdin>
.Kod źródłowy może nawet pochodzić z Internetu.
@Morwenn zauważa, że ten kod:
działa na GodBolt (ale nie będzie działać na twoim komputerze - żaden popularny kompilator tego nie obsługuje).
Czy jesteś prawnikiem językowym? Ok, więc zapoznajmy się ze standardem.
Na pytanie, czy źródła programów C ++ muszą pochodzić z plików, nie ma jednoznacznej odpowiedzi w standardzie językowym. Patrząc na szkic standardu C ++ 17 (n4713), sekcja 5.1 [lex.separate] brzmi:
Zatem kod źródłowy niekoniecznie jest przechowywany w pliku jako takim, ale w „jednostce zwanej plikiem źródłowym”. Ale skąd się biorą dołączenia? Można by przypuszczać, że pochodzą z nazwanych plików w systemie plików ... ale to też nie jest wymagane.
W każdym razie
std::source_location
nie wydaje się zmieniać tego sformułowania w C ++ 20 ani wpływać na jego interpretację (AFAICT).źródło
Jeszcze przed C ++ 20 standard miał:
Definicja jest taka sama dla
source_location::file_name
.W związku z tym nie nastąpiła zmiana w zakresie obsługi implementacji bez systemu plików w C ++ 20.
Standard nie definiuje dokładnie, co oznacza „plik źródłowy”, więc interpretacja może zależeć od tego, czy odnosi się on do systemu plików. Przypuszczalnie mogłoby to oznaczać, że implementacja tworzy „odręczną notatkę, którą mi wtedy przekazałeś”, jeśli rzeczywiście identyfikuje ona „plik źródłowy” w tej implementacji języka.
Podsumowując: tak, źródła są standardowo określane jako „pliki”, ale czym jest „plik” i czy w grę wchodzi system plików, nie jest określone.
źródło
scanner-c++
powracający napis „Lewa szafka, trzecia szuflada, czwarty folder z czerwonymi zakładkami, strona 17” .