Предположим что ваш проект состоит минимум из трех файлов...
В первом и во втором файле вы подключили третий файл инструкцией #include, а потом вы подключаете к первому еще и второй... Получается что #include на месте своего подключения вставляет текст того файла и получиться примерно такой бутерброд в первом файле:
#include "second file"
#include "third file"
int main(){тут в принципе реализация программы}
но #include "second file" замениться на:
#include "third file"
int func(){} //функция которую хотели использовать в первом файле...
и выглядеть будет вот так:
#include "third file"
int func(){} //функция во втором файле, которую хотели использовать в первом файле...
#include "third file"
int main(){тут в принципе реализация программы}
А потом еще и третий файл добавиться в первый. Но уже видно что третьих файла подключается два в первом потому что он был еще и во втором... Если в третьем будет какая то функция то такой подход вызовет ошибку. Две одинаковые функции и какую сейчас вызывать непонятно...
В таком случае используют конструкцию #ifndef #define #endif
#ifndef THIRD_FILE //обозначает если переменная THIRD_FILE не объявлена
#define THIRD_FILE //объявить такую переменную THIRD_FILE
тут тело самой библиотеки
#endif //говорит что #ifndef распространяется до этого места
Как же это работает. В первой строке проверяется объявлена ли переменная. Если нет, то значит библиотека еще не была подключена и выполняется все что находится от #ifndef до #endif. При первом выполнении у нас объявляется переменная с этим именем и при повторном включении библиотеки #ifndef поймет что такая переменная существует и пропустит (сделает как будто там ничего не было) от #ifndef до #endif. Таким образом проблем с множественным подключением одного файла можно избежать...
Другие языки программирования и технологии
Изучаю си++ обьясните заголовок... #ifndef _PROJECT_H_ #define _PROJECT_H_ Это что создает файлы?
Вадим Савинкин
Спасибо за подробный ответ, но всеровно я не совсем представляю что и как... как вообще называется эта тема?
можно заменить на #pragma once
Александр Мысливый
Вот уж эти визуал студио... А эта прагма в других компиляторах поддерживается!? Вообще у каждого компилятора свои наборы прагм, поэтому для совместимости их советуют не использовать вообще!
Это блокировка от повторного использования файла.
Похожие вопросы
- Стоит ли изучать Си-шарп?
- я такой тупой что уже два года изучаю си шарп с перерывами и до сих пор не могу освоить основы, постоянно путаюсь в коде
- Есть ли библиотеки для Visual studio 2008 c++ вроде conio.h и conlib.h
- книги по С++ -файлы с и h (не синтаксис)
- Как в языке программирования СИ осуществлять вызов подпрограммы, которая находится в другом файле?
- вопрос по C++ как работать с заголовками? компилятор ругается, непойму как связать 3 файла. исходники внутри.
- [C++] #define
- НЕбольшие вопросики по Си. Ребят, помогите пока желание изучать не угасло
- у меня на жостких дисках появляются странные скрытые .exe файлы,как мне найти кто их создает,можит есть ли такая програм
- Стоит ли изучать язык php? Моя цель - уметь создавать ЛЮБЫЕ сайты, css и html уже знаю, и вот начал js учить. Этих знани