Зачем пишут #ifndef file_h в начале файла

163
22 октября 2018, 05:20

Для каких ситуаций может быть полезно определение именно таким образом?

#ifndef __IMAGE_H__
#define __IMAGE_H__
////////////////////
#endif 
Answer 1

Эти директивы предназначены для защиты от многократного включения при наличии сложной иерархии включаемых файлов - если такой файл уже был включен где-то раньше, то и __IMAGE_H__ будет объявлена, а значит, условный #define будет пропущен, вместе со всеми объявлениями до #endif

В некоторых компиляторах есть аналогичные по действию #pragma, например,

#pragma once

Но версия с условием наиболее универсальна.

Answer 2

Это же классический include guard, который защищает от повторного включения заголовочных файлов, чтобы не было переопределения одних и тех же функций/классов.

Answer 3

Так обычно делается в заголовочных файлах, включаемых по include. В случае если заголовочный файл будет включен в программу дважды, это вызовет кучу ошибок типа "повторное объявление". Чтобы этого не происходило, этим define объявляют флаг, что файл уже включен и следовательно, когда он будет включен повторно, ifndef не сработает и все содержимое файла будет проигнорировано.

READ ALSO
почему мы тут пишем int dist = 252; а на втором классе miles хотя я не могу найти между ними связи

почему мы тут пишем int dist = 252; а на втором классе miles хотя я не могу найти между ними связи

Потому что переменную в одном методе решили назвать dists, а в другом - miles, их имена не обязательно должны совпадать, хотя и хранят одно и то же значение...

151
Как вставить Spring Bean в xml для factory

Как вставить Spring Bean в xml для factory

Без Spring я инициализировал объект так:

169
Как правильно указать путь к файлу lang_rus.properties?

Как правильно указать путь к файлу lang_rus.properties?

Помогите пожалуйста! На главной странице приложения я указал для одной из кнопкок text="%ruth_test_main" в fxml файле, теперь хочу подключить файл с русским...

181
Не отображается Fragment

Не отображается Fragment

Имеется NavigateActivity, в которой реализовано отображение навигационного меню

168