Порядок #includes, чтобы избежать ошибок компоновки - PullRequest
4 голосов
/ 26 января 2012

Иногда в C ++ порядок включений имеет значение. Это случай использования openGL:

1.- Правильный путь:

#include <windows.h>                // Header File For Windows
#include <gl\glu.h>                 // Header File For The GLu32 Library

2.- Неправильный путь:

#include <gl\glu.h>                 // Header File For The GLu32 Library
#include <windows.h>                // Header File For Windows

Это происходит только для некоторых конкретных заголовков или это своего рода случайную проблему сложно предотвратить априори?

Если это так:

Как узнать правильный порядок включений?

Ответы [ 4 ]

4 голосов
/ 26 января 2012
  1. Просто некоторые конкретные заголовки. Некоторые могут назвать это недостатком дизайна.
  2. Ты не можешь. Посмотрите на сообщения об ошибках, которые вы получаете, и тщательно их рассортируйте. В Windows, сначала рекомендуется установить windows.h.
2 голосов
/ 26 января 2012

В свое время довольно много известных программистов на Си советовали, чтобы ни один заголовок не включал никаких других заголовков - пользователь должен включить правильные заголовки в правильном порядке, чтобы все заработало. Это работало (и продолжает работать) довольно хорошо для небольших проектов, в которых не слишком много заголовков.

Однако для более крупных проектов отслеживание всех зависимостей заголовка может / становится значительно более трудным, вплоть до того, что во многих современных кодовых базах это практически невозможно. Сами большинство современных заголовков включают любые другие заголовки, от которых они зависят.

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

2 голосов
/ 26 января 2012

Для окон вам сначала нужно #include <windows.h>.

Затем в файлах заголовков избегать #include - вместо этого предпочитайте прямые объявления.

Сохраняйте меньше компиляции, когда вы просто меняете один файл заголовка.

2 голосов
/ 26 января 2012

Порядок не имеет значения для стандартной библиотеки C ++.
Для других библиотек это обычно не имеет значения (если только они не говорят об этом).
Для определенных платформ это может иметь значение, и обычно оно четко указывается, когда это имеет значение.

Например:

В Windows #include <windows.h> идет раньше всех остальных.

Кроме того,
#include <stdafx.h>
который является специфическим заголовком MSVC ++, должен быть включен прежде всего, если вы используете предварительно скомпилированные заголовки.

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