Это хорошая практика, чтобы всегда включать стандартные заголовки? - PullRequest
2 голосов
/ 29 марта 2019

Я прочитал ответ на этом сайте, объясняющий, почему не всегда следует включать все (включая защищенные) заголовочные файлы - замедляет время компиляции, загрязняет глобальное пространство имен и т. Д.

Но я хотел бы спросить конкретно - всегда ли учитываются стандартные заголовки, такие как <stdlib.h> и <stdio.h>, хорошая или плохая практика?

Почему я не должен поддерживать файл stdheaders.h с #include s для всех стандартных заголовков и просто включать его везде? Я думаю, что это может спасти меня от ошибок, когда я использую функцию, для которой я забыл включить стандартный заголовок.

В частности, я хотел бы знать, что считается стандартной практикой в ​​разработке на Си. Спасибо

1 Ответ

2 голосов
/ 29 марта 2019

Для каждого исходного файла, будь то файл .c или .h, рекомендуется включать только заголовки, которые ему нужны.Это не только сокращает время компиляции, но и служит для документирования функциональности файла.

Вот несколько примеров:

f1.c:

#include <stdio.h>

void print_int(int i)
{
    printf("i=%d\n", i);
}

f2.c:

#include <stdlib.h>

void *safe_malloc(size_t size)
{
    void *p = malloc(size); 
    if (!p) exit(1);
    return p;
}

f3.c:

int sum(int a, int b)
{
    return a+b;
}

Файл f1.c включает только stdio.h, потому что он выполняет ввод-вывод, но не выполняет никаких других функций.Точно так же f2.c включает только stdlib.h, потому что он использует определенные там функции, но не использует никаких функций ввода-вывода, а f3.c не включает никаких заголовков, потому что они им не нужны.

Если вы считаете, что включили ненужные файлы, закомментируйте их и скомпилируйте все предупреждения, чтобы узнать, какие из них объявляют нужные вам функции или переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...