Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Пару вопросов по define


Автор: Robix 16.7.2015, 10:34
1-й вопрос
При сборке проекта в Visual Studio получаю предупреждение.
D:\Program\MicrosoftVisualStudio\VC\include\stdint.h(65): warning C4005: 'UINT8_MAX' : macro redefinition
d:\proj\order\..\..\inc\tech.h(112) : see previous definition of 'UINT8_MAX'

Впринципе понятно в чем дело, у меня в файле tech.h
#define UINT8_MAX   255 а в stdint.h тоже самое определение, но с другим значением

Менять tech.h не могу, так как это бибилиотека нужна для проекта. А вот стандартный stdint.h мне не нужен. Но его исключить не получается, так как он видимо через другие стандартные c++
библиотеки, которые я включаю находится.

От этого предупреждения можно избавиться? 

2-й вопрос
Еще вопрос:
В заголовочном файле часто пишут. Я не до конца понял.
#ifndef TECH_H
#define TECH_H

#endif

Можете объяснить что дает #define TECH_H ?
А если я напишу его без #ifndef TECH_H и #endif смысл поменяется?











Автор: Guinness 16.7.2015, 11:00
Цитата(Robix @  16.7.2015,  11:34 Найти цитируемый пост)
От этого предупреждения можно избавиться? 

Сделайте https://msdn.microsoft.com/ru-ru/library/ts4w8783.aspx перед своим определением.
Цитата(Robix @  16.7.2015,  11:34 Найти цитируемый пост)
Можете объяснить что дает #define TECH_H ?

Делают это для того, чтобы заголовочный файл не был многократно включён в исходные файлы. Собственно, достаточно убрать эту конструкцию, и, скорее всего, ничего не будет собираться. Насколько я помню, это делалось, когда компиляторы ещё не поддерживали директиву https://msdn.microsoft.com/en-us/library/4141z1cx.aspx.

Автор: Robix 16.7.2015, 20:17
Спасибо. Получилось с undef. Насчет #define в заголовочных файлах тоже кажется понятно smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)