Когда макросы c раскрываются, почему код становится таким большим? - PullRequest
0 голосов
/ 25 апреля 2020

Я экспериментировал с макросами C и решил расширить их, чтобы увидеть замену. Когда я поставляю g cc с -E, я получаю 800 строк кода только для этого простого кода:

#include <stdio.h>
#define TEN 10

int main(void) {
    printf("hello world %d", TEN);
    return 0;
}

Мои вопросы:

  • Почему я получаю так много строк!?
  • Как C может работать так быстро с таким количеством строк?
  • Это много строк - проблема?

1 Ответ

3 голосов
/ 25 апреля 2020

Опция -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, и не о чем беспокоиться:)

...