Это сложный вопрос в мире C / C ++, с таким количеством элементов, выходящих за рамки стандарта.
Я думаю, что порядок заголовочных файлов не является серьезной проблемой, пока он компилируется, как сказал squelart.
Мои идеи таковы: если во всех этих заголовках нет конфликта символов, любой порядок в порядке, и проблему с зависимостью заголовка можно исправить позже, добавив строки #include в некорректный .h.
Реальная проблема возникает, когда какой-то заголовок меняет свое действие (проверяя условия #if) в соответствии с тем, какие заголовки находятся выше.
Например, в stddef.h в VS2005 есть:
#ifdef _WIN64
#define offsetof(s,m) (size_t)( (ptrdiff_t)&(((s *)0)->m) )
#else
#define offsetof(s,m) (size_t)&(((s *)0)->m)
#endif
Теперь проблема: если у меня есть собственный заголовок ("custom.h"), который нужно использовать со многими компиляторами, включая некоторые старые, которые не предоставляют offsetof
в своих системных заголовках, я должен написать в мой заголовок:
#ifndef offsetof
#define offsetof(s,m) (size_t)&(((s *)0)->m)
#endif
И обязательно сообщите пользователю #include "custom.h"
после всех системных заголовков, в противном случае строка offsetof
в stddef.h выдаст ошибку переопределения макроса.
Мы молимся, чтобы больше не встречалось подобных случаев в нашей карьере.