2016-02-15 2 views
1

У меня есть проект, который скомпилирован на нескольких платформах, один из которых - Visual C++. Я заметил, что мы часто нарушаем сборку, потому что разработчик использовал errno без включения errno.h, но поскольку они работают в Visual Studio, а их источник включает stddef.h, прямо или косвенно, он не поддавался компиляции для их.MSVS 2015 ставит errno в stddef.h?

Почему errno определен в этом заголовке? Какой хороший способ поймать эту проблему в начале нашего цикла, т.е. е. все еще внутри Visual Studio?

+0

В вашем проекте наведите курсор на символ 'errno', нажмите F12, и VS покажет вам, где обозначен символ. Это начало. –

+0

Я пытаюсь получить сбой компиляции, когда errno.h был забыт. – Enno

+1

Другой заголовок может содержать '', поэтому он работает. Нет стандартного кросс-платформенного способа проверить, включен ли какой-либо конкретный заголовок, особенно, поскольку другой заголовок может включать файл, поэтому он фактически будет включен. –

ответ

2

Что такое хороший способ поймать эту проблему в начале нашего цикла, т.е. е. все еще внутри Visual Studio?

Проблемы, подобные этому, очень трудно, если не невозможно, поймать, если вы не разрабатываете одновременно на двух разных платформах.

Вы можете найти строку «errno» во всех файлах проекта VS, а затем проверить, находит ли поиск также «errno.h», но это будет полезно только для этой конкретной проблемы. Стандартная библиотека имеет много других функций/макросов, которые могут быть косвенно видны вам. Нецелесообразно использовать одну и ту же стратегию для обеспечения того, чтобы правильные файлы заголовков были #include d для всех функций/макросов.

Дисциплинированный разработчик и/или экспертная оценка кода могут быть вашими лучшими вариантами для решения проблемы.

+0

Я думаю, вы, вероятно, правы. Я бы предпочел, чтобы это уже происходило во время компиляции, но другой тест, который сканирует файлы для строки errno и проверяет, что errno.h включен ими, является другим решением. Если разработчики запускают тесты до того, как они совершают, как и должны (мы пока еще не применяем правила фиксации), тогда это должно их сохранить. Обзор кода происходит позже в нашем процессе (после того, как код прошел через CI-сервер, и ошибка уже стоила времени разработчика), так что это не сработает. – Enno

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