Опция -E просит g cc остановиться после стадии препроцессора без компиляции, так что в итоге вы получите (по сути) весь файл stdio.h
вашей системы, скопированный и вставленный в заголовок вашей программы. Это определенно то, откуда приходят 800 строк.
Это, однако, не проблема, потому что, когда вы компилируете свою ~ 800-строчную программу, прототипы функций в stdio.h
, которые вы не используете в своем код не займет места в вашем исполняемом файле.
Что касается того, «как C работает так быстро с таким количеством строк», важно помнить, что исходный код, который мы пишем, не то, что выполняет машина, machine выполняет скомпилированные двоичные файлы, которые компиляторы создают из исходного кода.
Если вы удалите #define TEN 10
и измените строку printf на printf("hello world %d",10);
и снова запустите gcc
с -E
, вы обнаружите, почти такой же исходный файл ~ 800 строк, как и раньше. Это не симптом #define
, это просто, как работает препроцессор C, и не о чем беспокоиться:)