Вопрос

Если у меня есть следующее:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

#include <stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif


Будет ли это означать, что код, использующий... #include example.h ...не придется... #include example.hе...зависимости?(т.е.: #include <stdio.h> )

Это было полезно?

Решение

Правильно. Вот почему рекомендуется ограничивать количество необходимых заголовков, включенных в другие заголовки.Препроцессор заменит директиву «#include» на содержимое stdio.h, поэтому ваш заголовок будет выглядеть примерно так для компилятора:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

<contents of stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif

Другие советы

Да

Но если код зависит от <stdio>, вероятно, следует включить его.(После всего, <stdio> также имеет множественную защиту от включения.)

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

Да, вы можете это сделать, и это даст желаемый эффект.

Для вашего конкретного примера вам нужно FILE объявлен в <stdio.h>, поэтому его полезно включить.

Если используется прототип parse_string() size_t вместо unsigned int и const char * (для имени файла) вместо FILE *, я бы включил <stddef.h> в "example.h"

#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top