Preprosesor C dilampirkan ke C, tetapi memiliki sintaks yang sama sekali berbeda dari bahasa utama:
spasi putih signifikan secara sintaksis (ujung garis mengakhiri pernyataan, celah setelah makro menentukan awal daftar pengganti)
blok berbasis kata kunci alih-alih blok menguatkan,
elif
bukanelse if
definisi yang dipimpin kata kunci alih-alih deklarasi-mencerminkan-penggunaan, tidak
=
untuk definisi nilaipetunjuk dari sintaks string alternatif (
#include <>
vs#include ""
)evaluasi malas (dari C, jelas; tetapi 6.10.3.1 dapat dibaca sebagai menyiratkan urutan spesifik ekspansi makro juga, di beberapa tempat yang penting)
Ini benar-benar tidak terlihat seperti C sama sekali! Secara teknis itu adalah bahasanya sendiri, tetapi selalu digunakan sebagai bagian yang hampir tidak terpisahkan dari C dan tampaknya sangat aneh bahwa itu tidak akan terintegrasi dengannya secara sintaksis.
Wikipedia tidak berbicara tentang sejarahnya; Repositori Pola Portland memberikannya izin yang lewat , tetapi tidak menjelaskan lebih rinci bahwa itu dirancang oleh orang lain selain situs web C. Dennis Ritchie dengan sejarah C mungkin memiliki jawabannya, tetapi sayangnya tidak ada lebih lama tersedia.
Sebagai mesin makro, itu jelas memiliki semantik sangat berbeda dari bahasa runtime, yang akan menjelaskan beberapa perbedaan, tetapi bukan aspek desain visual (itu juga tidak jelas untuk mata yang modern apakah itu awalnya ditujukan sebagai mampu dari jenis dari menyenangkan bahwa yang sistem penggantian memungkinkan, atau apakah itu "hanya" cara yang bijaksana untuk fungsi sebaris dalam waktu sebelum pengoptimal yang kuat). Rasanya seperti sesuatu yang lebih dekat dengan apa yang akhirnya menjadi template C ++ akan menjadi evolusi yang lebih logis terhadap makro, jika semantik seperti C benar-benar menjadi titik awal, tetapi ada bukti konkret yang lebih sedikit daripada sintaksinya.
Apakah kita punya catatan mengapa itu dirancang seperti ini, atau apa pengaruh pencipta?
Jawaban:
Dari http://www.jslint.com/chistory.html ("Pengembangan Bahasa C" oleh Dennis M. Ritchie):
Tampaknya dari akun di bagian 4 dari referensi [Snyder 74] yang ditautkan dalam kutipan di atas bahwa Alan Snyder telah mengerjakan kompiler C portabel (sekarang orang mungkin mengatakan "retargetable") C. Mungkin ini adalah motivasi untuk meminta preprosesor.
Saya belum dapat menemukan detail tambahan, pada desain preprocessor C itu sendiri, sebagai bahasa.
sumber
Saya mungkin hanya menambahkan bahwa itu sangat umum untuk bahasa assembly untuk memiliki pra-prosesor assembler makro yang terlihat sangat mirip dengan CPP.
sumber