powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / #ifndef #define #endif - не желают работать
17 сообщений из 17, страница 1 из 1
#ifndef #define #endif - не желают работать
    #32763110
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что гадость Builder 5-й мне делает?
файл Unit1.h:

Код: plaintext
1.
2.
3.
4.
5.
#ifndef Unit1H
#define Unit1H

#include "Unit2.h"

#endif

файл Unit2.h:

Код: plaintext
1.
2.
3.
#ifndef Unit2H
#define Unit2H
int AAA;
#endif

Все, приехали - переменная AAA defined in both module...
Может, препроцессор где-то хитрой галочкой отключен?
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763171
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, есть
Код: plaintext
1.
2.
3.
4.
// module 1.cpp
#include <Unit2.h>

// module 2.cpp
#include <Unit2.h>

После препроцессирования мы получаем две единицы трансляции (файл полученный после обработки препроцессором) следующего содержания:

module 1.cpp:
Код: plaintext
int AAA;
module 2.cpp:
Код: plaintext
int AAA;

Так в чем не прав компилятор? Может ты не совсем понимаешь как работает препроцессор?
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763415
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peremennuiu obievi v faile: Unit2.cpp
a v Unit2.h obievi ee external, togda vse srabotaet.
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763770
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не фиг по два раза объявлять переменные.
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763789
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MasterZiv

А почему два, а не три или не четыре - ведь Lepsty не привел самое интересное, а именно cpp модули включающие Util2.h.
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763839
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пиши
static int AAA;
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32763975
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepstyВсе, приехали - переменная AAA defined in both module...
Может, препроцессор где-то хитрой галочкой отключен?

file Unit2.h
Код: plaintext
1.
2.
3.
4.
#ifndef Unit2H
#define Unit2H
extern int AAA;
#endif

file Unit2.c / Unit2.cpp
Код: plaintext
1.
int AAA;
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32764182
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Все понятно.
А вообще никто не наталкивался на какую-нибудь статейку с подробным рассмотрением подобных ситуаций и вообще того, как правильно размещать объявления, включать друг в друга файлы и т.д.? А то у меня в проекте накопилось 7 штук файлов и то, что я здесь описано - это уже окончание моей битвы - то, что не удалось разрешить самостоятельно
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32764202
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет окончания битвы - это было сильно сказано :-(
Есть, например, такая проблема: не получается inline функцию разделить на объявление и определение в разных файлах.
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32764211
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsty... не получается inline функцию разделить на объявление и определение в разных файлах.
Код: plaintext
1.
2.
3.
Дык, насколько мне известно, inline -функции - это функции подстановки (обычно небольшого размера)
и компилятор просто подставляет тело функции в код. 
При это компилятор может проигнорировать по каким-то своим причинам директиву inline.
Для принудительной "inline" необходимо указать forceinline (или что-то в этом роде) 
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32764217
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так если бы игнорировал, а то он ошибку выдает - дескать, undefined symbol
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32764376
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, они и описываются и определяются в одном месте: в этом -то и весь фокус! Например:
Код: plaintext
inline int func(int n){ return n* 10  };
(или я не прав?)
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32765553
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, как говорится, Борис ты не прав!
Можно таки объявлять, а потом описывать в другом месте. Однако только в объявлении необходимо указывать inline, а в описании не надо...
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32765638
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepstyСпасибо. Все понятно.
А вообще никто не наталкивался на какую-нибудь статейку с подробным рассмотрением подобных ситуаций и вообще того, как правильно размещать объявления, включать друг в друга файлы и т.д.? А то у меня в проекте накопилось 7 штук файлов и то, что я здесь описано - это уже окончание моей битвы - то, что не удалось разрешить самостоятельно


Эти тваи случаи в букварях по С проходят, панимаишь ?
"Мама мыла раму" помнишь ? Вот там же, рядом, написана про это.
Ни адин здравамыслящий чилавег на эту тему статей писать ни будет - ани никаму ниинтересны. Вазьми любой учебниг по С (лучша именно па С, в С++ могут пра такую мелач и забыть написать) и - читай, читай, читай...
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32765645
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsty
Есть, например, такая проблема: не получается inline функцию разделить на объявление и определение в разных файлах.


И не получится. INLINE должна быть доступна в виде своего тела компилятору
при компилировании всех модулей, использующих эту функцию.
Это согласно стандарту.
Т.е. перевожу - все определения inline-функций должны быть включены в
общий заголовок, как правило, это делают в том же заголовке, где помещено объявление этой функции, или в отдельный заголовок, включающийся из него.

То же самое можно сказать и про шаблонные функции, хотя там немного все сложнее.
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32765647
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни прав ты , Alex_VC, это понятно, я просто пакажу как ище можна
[src c++]

inline int func(int n);

// ...

int func(int n)
{
return n*10
}

[/quot]
...
Рейтинг: 0 / 0
#ifndef #define #endif - не желают работать
    #32766047
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНи прав ты , Alex_VC, это понятно, я просто пакажу как ище можна
[src c++]

inline int func(int n);

// ...

int func(int n)
{
return n*10
}


Дык, я уже поправился, кажется (см. выше)
Век живи, век учись...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / #ifndef #define #endif - не желают работать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]