June 25th, 2009

with Cat The Cat

Глубина падения Си.

#define A(arg) A_start (arg) A_end

A (
#define A_start A_end
)
gcc -E -o a.i a.c даст нам следующее:
# 1 "aa.c"
# 1 ""
# 1 ""
# 1 "aa.c"


A_end () A_end


Строки в <> для #include - единственное место, где лексер работает особым образом.

Из-за него, по хорошему, надо писать лексер препроцессора долго и нудно. А если бы была директива #includesys "file", то лексер был бы коротким и простым.