Форум программистов, компьютерный форум CyberForum.ru

конструкция #if not defined "xxx" #define xxx нужна ли? - C++

Восстановить пароль Регистрация
 
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
06.03.2013, 12:03     конструкция #if not defined "xxx" #define xxx нужна ли? #1
Решил вот научится писать не просто код, а правильный код.
часто в заголовочных файлах вижу конструкцию
C++
1
2
3
4
#if !defined(_xxx)
#define _xxx
//some code
#endif
Нужно ли это?

Добавлено через 1 минуту
п.с. подразумевается что и я и кто будет использовать эти файлы должны всё делать правильно
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2013, 12:03     конструкция #if not defined "xxx" #define xxx нужна ли?
Посмотрите здесь:

C++ Добавить "xxx" перед последним словом строки
ошибка stray '\xxx' in program C++
C++ Как открыть файл "xxx.mdb" технологией DAO
C++ Ошибка "first defined here" Code::Blocks
"XXX.exe не является приложением win32" - перенос проекта на XP C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
06.03.2013, 12:08     конструкция #if not defined "xxx" #define xxx нужна ли? #2
Цитата Сообщение от nefton Посмотреть сообщение
Нужно ли это?
Непременно! Это делается для гарантии того, что код из хедера не будет вставлен дважды и на этой почве не произойдет зацикливания препроцессора.
Вместо _xxx обычно используется ИМЯ_H, где ИМЯ - имя соответствующего хедера
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
06.03.2013, 12:13     конструкция #if not defined "xxx" #define xxx нужна ли? #3
Ага. Наиболее классический вариант использования такой:
C++
1
2
3
4
5
#pragma once // студийная мулька. Тоже не повредит здесь
#ifndef FILE_H
#define FILE_H
 // code
#endif  /* FILE_H */
Jupiter
06.03.2013, 13:06
  #4

Не по теме:

Цитата Сообщение от ITcrusader Посмотреть сообщение
// студийная мулька. Тоже не повредит здесь
зарплата зависит от количества строк?

diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.03.2013, 13:25     конструкция #if not defined "xxx" #define xxx нужна ли? #5
Цитата Сообщение от ITcrusader Посмотреть сообщение
студийная мулька
Не только студийная. Ее поддерживают все адекватные компиляторы, поэтому ее можно спокойно использовать.
Недостаток инклуд гардов заключается в том, что если переименовать файл или перенести его в другое место, то дефайны тоже придется менять.
Так что, на мой взгляд, лучше использовать
C++
1
#pragma once
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
06.03.2013, 14:24     конструкция #if not defined "xxx" #define xxx нужна ли? #6
Jupiter, у этих ребят, полагаю, нет.

// complex standard header
#pragma once
#ifndef _COMPLEX_
#define _COMPLEX_
...

Однажды я пытался найти ответ на вопрос "а что использовать?" В итоге, пришел к выводу, что такой способ носит более универсальный характер. Нигде ответов однозначных, декларирующих нецелесообразность использования чего-либо - я не обнаружил.
Jupiter
06.03.2013, 14:38
  #7

Не по теме:

Цитата Сообщение от ITcrusader Посмотреть сообщение
Однажды я пытался найти ответ на вопрос "а что использовать?" В итоге, пришел к выводу, что такой способ носит более универсальный характер. Нигде ответов однозначных, декларирующих нецелесообразность использования чего-либо - я не обнаружил.
лол что?
использовать эти две конструкции вместе все равно что
C++
1
++i; //увеличиваем переменную i на еденицу
писать такие комментарии, или вы по видеоурокам обучались и повторяете все как на каком-то видео?

SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
06.03.2013, 14:38     конструкция #if not defined "xxx" #define xxx нужна ли? #8
Цитата Сообщение от ITcrusader Посмотреть сообщение
студийная мулька.
Не только. В борланде тоже есть.

nefton, вот настоятельно советую подробно почитать. Очень хорошо подытожено.

Не по теме:

Ну кроме именованных констант.

ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
06.03.2013, 15:29     конструкция #if not defined "xxx" #define xxx нужна ли? #9
Цитата Сообщение от Jupiter Посмотреть сообщение
зарплата зависит от количества строк?
Цитата Сообщение от Jupiter Посмотреть сообщение
или вы по видеоурокам обучались и повторяете все как на каком-то видео?
Я как-то в одной из последних тем выражал свое отношение к видео урокам: "Они годны лишь для тех, кто учится завязывать галстук". Что касается того, что вы (с высоты вашей репутации) строите предположение о том, как я обучался, на основе того, как я пользуюсь include guards'ами, то тут, мне думается, что едва ли такой способ их использования - показатель некомпетентности.

Ну, зато ваши насмешки уже получили пару положительных отзывов. Я, признаться, даже и не знаю более, что написать.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.03.2013, 15:54     конструкция #if not defined "xxx" #define xxx нужна ли? #10
ITcrusader, Он прав потому что. Не нужно писать лишних строк, которые не играют ровным счетом никакой роли.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2013, 13:30     конструкция #if not defined "xxx" #define xxx нужна ли?
Еще ссылки по теме:

C++ Обработка телефонного номера в форме (XXX)XXX-XX-XX
Как отслеживать ошибки "already defined in ." C++
Что означает конструкция "!!" и "!!!"? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.03.2013, 13:30     конструкция #if not defined "xxx" #define xxx нужна ли? #11
Цитата Сообщение от ITcrusader Посмотреть сообщение
В итоге, пришел к выводу, что такой способ носит более универсальный характер
В то, что #pragma once может не быть в каком-либо компиляторе, я могу поверить, ибо этого нет в стандарте. Но вот то, чтобы где-то не работали include guard'ы - такого быть не может, ибо это не специализированный механизм, а своего рода хак препроцессора, т.е. использование возможностей (описанного в стандарте) препроцессора таким вот особым образом. На фоне этого #pragma once рядом с include guard'ом выглядит как пятая нога у собаки.
Yandex
Объявления
11.03.2013, 13:30     конструкция #if not defined "xxx" #define xxx нужна ли?
Ответ Создать тему
Опции темы

Текущее время: 07:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru