#include операторы, содержащие косую черту (заголовочные файлы, состоящие из двух частей) - PullRequest
7 голосов
/ 11 марта 2010

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

#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', но если я попробую что-то вроде "man pci" (в / usr / include / sys / есть заголовок pci.h, там нет записи.

Ответы [ 3 ]

8 голосов
/ 11 марта 2010

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

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

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

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

2 голосов
/ 11 марта 2010

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

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

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

2 голосов
/ 11 марта 2010

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

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