Операторы #include, которые включают наклонную черту (заголовочные файлы, составленные из двух частей)

Иногда я вижу заголовочные файлы формы.

#include <sys/sysinfo.h> // I found this on my system under /usr/include/sys/sysinfo.h. Is that all the "sys/" means?                                                             

Что является названным и почему эти заголовочные файлы, отличающиеся от большинства других как

#include <stdio.h>

Возможно, группа связанных заголовочных файлов, сгруппированный под маркировкой 'sys', но если я пробую что-то как "PCI человека" (существует pci.h заголовок в/usr/include/sys/, нет никакой записи.

7
задан wp123 11 March 2010 в 05:41
поделиться

3 ответа

Это удобный способ предоставить некоторую «структуру пространства имен» для заголовочные файлы. В мире Unix основное деление происходит между заголовками, такими как , которые часто являются довольно общими и предназначены в первую очередь для использования в пользовательских программах, а не в основном для использования ядром операционной системы. Напротив, заголовки вроде или предназначались для использования при компиляции ядра - они были более системными.

В настоящее время он позволяет отделить заголовки вашего проекта от заголовков другого проекта. Например, идентифицирует заголовок как принадлежащий к базе кода OpenSSL.

Я не знаю, есть ли конкретное название для этого стиля указания заголовков.

Обратите внимание, что если заголовки OpenSSL хранятся в каталоге / usr / local / include / openssl , тогда вы указываете -I / usr / local / include в команде компилятора. линия. На самом деле происходит поиск заголовка путем добавления к имени в угловых скобках префикса одного из ряда стандартных каталогов, из которых в Unix по умолчанию используется / usr / include .Следовательно, находится в /usr/include/stdio.h , а находится в /usr/include/sys/sysinfo.h и т. д.

8
ответ дан 6 December 2019 в 21:12
поделиться

Они все еще являются заголовками, но они не прямо в пути поиска по умолчанию. Это часто делается для заголовков из сторонних библиотек, чтобы хранить их отдельно от стандартных заголовков libc.

2
ответ дан 6 December 2019 в 21:12
поделиться

Это связано с тем, как работает ваш препроцессор. Если ваш препроцессор ищет в / usr / include / , тогда вам понадобится sys / sysinfo.h . Если ваш препроцессор смотрит в / usr / include / sys / , тогда вам понадобится только sysinfo.h

Попробуйте поиграть с gcc с -I и -l options

edit: это должны быть заглавная i и строчная L

2
ответ дан 6 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: