2014-01-10 3 views
7

Например, возьмем открытые (2), которая имеет следующий синопсис:Должен ли я включать любые или все заголовки, перечисленные в кратком обзоре справочной страницы?

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode); 
int creat(const char *pathname, mode_t mode); 

Должен ли я включать все эти файлы заголовков или является какой-либо один из них прекрасно? В первом случае, как я могу узнать, какие файлы заголовков содержат какие функции, макросы и typedefs?

ответ

7

Вы должны включить их все. Спецификация POSIX сообщит вам, что у каждого (например, this - это спецификация POSIX для fcntl.h) или, по крайней мере, то, что гарантировано в каждом.

+0

И вы должны предпочтительно включать файлы в порядке, указанном на странице руководства (предпочтительно, для Linux на Linux, т.е. [open (2)] (http://man7.org/linux/man-pages /man2/open.2.html) ....) –

1

Вы должны включить все эти файлы заголовков. Заголовки, упомянутые в кратком обзоре, должны быть включены.

1

AFAIK, вы должны включить все эти файлы заголовков. Почему вам нужно знать, какой файл заголовка содержит макросы, функции или typedefs, если вы в конечном итоге включите их все?

1

Только <fcntl.h> не требуется. Есть две справочные страницы для open. http://linux.die.net/man/2/open и http://linux.die.net/man/3/open.

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode); 
int creat(const char *pathname, mode_t mode); 

Если вы используете перегрузку с mode_t, вам нужно <sys/types.h>.

#include <sys/stat.h> 
#include <fcntl.h> 

int open(const char *path, int oflag, ...); 

Для последней перегрузки, opengroup.org считает <sys/stat.h> необязательным. Также не требуется <sys/types.h>.

Требование о включении <sys/types.h> было удалено. Хотя для соответствия реализаций предыдущих спецификаций POSIX требуется , он не требовался для приложений UNIX.

 Смежные вопросы

  • Нет связанных вопросов^_^