Вопрос по c/c++
- Войдите на сайт для отправки комментариев
Втр, 20/09/2016 - 19:31
Здравствуйте. Столкнулся с проблеммой, вернее не с проблеммой а особенностью:
Допустим есть некая библиотека:
lib.h и lib.cpp, заголовочный файл и файл с описанием функций, методов и тд.
В файле lib.h указано #include "lib.h" - что логично.
Допустим я подключаю эту библиотеку к своему проекту:
----------
#include "lib.h"
int main(){return 0;}
----------
Если я хочу например добавить пару вспомогательных переменных в файл lib.h, то при компиляции возникает ошибка, multiply defenition (переопределение типа) что вполне логично, т.к. заголовочный файл подключается 2 раза. Слово extern решает эту проблему? Будет ли видна эта переменная объявленная в заголовочном файле в файлах исходного кода?
В файле lib.h указано #include "lib.h" - что логично.
не логично. В lib. включают lib.h. А lib.h в lib.h нет.
Для защиты от повторного включения в начале lib.h пишут типа
#ifndef FIXFFT_H
В файле lib.h указано #include "lib.h" - что логично.
не логично. В lib. включают lib.h. А lib.h в lib.h нет.
Для защиты от повторного включения в начале lib.h пишут типа
#ifndef FIXFFT_H
благодарю за ответ, да я перепутал в lib.cpp пишут lib.h. Директивы препроцессора выставил
Как я понимаю extern использовать так:
Будут ли эти "с" относится к олному и тому же участку памяти?
Нет. Объявлять надо один раз, только в одном из файлов, а не в двух, как у Вас.
слово extern используется для описания переменной без выделения для нее памяти
поэтому такое определение может встречаться несколько раз, когда мы включаем это определение в заголовок библиотечного lib.h то о существовании переменной и о ее типе узнает и пользовательская программа и библиотечная, что логично
само определение переменной без слова extern выделяет под переменную память и не может встречаться несколько раз, должно быть одно. Для библиотечной переменной логично это определение поместить в lib.cpp