Sebuah pertanyaan yang agak aneh, bagaimanapun, jika saya ingat dengan benar, kode sumber C ++ tidak memerlukan sistem file untuk menyimpan file-nya.
Memiliki kompiler yang memindai kertas tulisan tangan melalui kamera akan menjadi implementasi yang sesuai. Meski secara praktis tidak masuk akal.
Namun C ++ 20 sekarang menambahkan lokasi sumber dengan file_name
. Apakah sekarang ini menyiratkan bahwa kode sumber harus selalu disimpan dalam sebuah file?
__FILE__
. Kelassource_location
hanya memungkinkan Anda mendapatkannya di situs panggilan fungsi.<iostream>
itu mungkin bukan file (jika Anda mengerti maksud saya), bukan file yang ditulis oleh pengembang?Jawaban:
Tidak, kode sumber tidak harus berasal dari file (atau pergi ke file).
Anda dapat mengkompilasi (dan menautkan) C ++ sepenuhnya di dalam pipa, meletakkan kompiler Anda di tengah, mis
dan sudah seperti itu selama beberapa dekade. Lihat juga:
Pengenalan
std::source_location
dalam C ++ 20 tidak mengubah keadaan ini. Hanya saja beberapa kode tidak akan memiliki lokasi sumber yang ditentukan dengan baik (atau mungkin terdefinisi dengan baik, tetapi tidak terlalu berarti). Sebenarnya, saya akan mengatakan bahwa desakan untuk mendefinisikanstd::source_location
menggunakan file agak rabun ... meskipun dalam keadilan, itu hanya setara dengan makro__FILE__
dan__LINE__
yang sudah ada di C ++ (dan C).@ HBv6 mencatat bahwa jika Anda mencetak nilai
__FILE__
saat mengompilasi menggunakan GCC dari aliran input standar:menjalankan hasil cetakan yang dapat dieksekusi
<stdin>
.Kode sumber bahkan dapat berasal dari Internet.
@Morwenn mencatat bahwa kode ini:
berfungsi di GodBolt (tetapi tidak akan berfungsi di mesin Anda - tidak ada kompiler populer yang mendukung ini.)
Apakah Anda seorang pengacara bahasa? Ok, jadi mari kita konsultasikan standar ..
Pertanyaan apakah sumber program C ++ harus berasal dari file tidak dijawab dengan jelas dalam standar bahasa. Melihat draf standar C ++ 17 (n4713), bagian 5.1 [lex.separate] berbunyi:
Jadi, kode sumber tidak harus disimpan dalam file itu sendiri, tetapi dalam "unit yang disebut file sumber". Tapi kemudian, dari mana asalnya? Seseorang akan berasumsi bahwa mereka berasal dari file bernama pada sistem file ... tetapi itu juga tidak diamanatkan.
Bagaimanapun,
std::source_location
tampaknya tidak mengubah kata-kata ini di C ++ 20 atau mempengaruhi interpretasinya (AFAICT).sumber
Bahkan sebelum C ++ 20, standarnya telah memiliki:
Definisinya sama untuk
source_location::file_name
.Dengan demikian, belum ada perubahan terkait dukungan untuk implementasi tanpa sistem file di C ++ 20.
Standar tidak secara tepat mendefinisikan apa artinya "file sumber", jadi apakah itu merujuk ke sistem file mungkin tergantung interpretasi. Agaknya, itu bisa menyesuaikan untuk implementasi untuk menghasilkan "catatan tulisan tangan yang Anda berikan kepada saya saat itu" jika itu memang mengidentifikasi "file sumber" dalam implementasi bahasa itu.
Kesimpulannya: Ya, sumber disebut sebagai "file" menurut standar, tetapi apa itu "file" dan apakah sistem file yang terlibat tidak ditentukan.
sumber
scanner-c++
kembali "Kabinet kiri, laci ketiga, folder tab merah keempat, halaman 17" .