Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 June 21

Т

Тёма in IT KPI C/C++ ХВ (не UB)
И является ли это хорошим решением, когда все глобальные переменные выделять в отдельный h файл, а потом его везде импортировать?
источник

A

Andrew in IT KPI C/C++ ХВ (не UB)
Тёма
И является ли это хорошим решением, когда все глобальные переменные выделять в отдельный h файл, а потом его везде импортировать?
Лучшее решение без глобалок
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Тёма
И является ли это хорошим решением, когда все глобальные переменные выделять в отдельный h файл, а потом его везде импортировать?
Глобальные переменные - очень плохо.
А глобальный переменные без неймспейса - вообще ад.
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Тёма
Столкнулся с проблемой:

main.cpp:
#incluse <A.h>

A.cpp:
#incluse <A.h>

A.h:
#include <B.h>

B.cpp:
#include <B.h>

B.h:
#include <config.h>
extern int val;

config.h:
int val = 0;


Ошибка:
multiple definition

Подскажите, что здесь не так?
Кста, а хедер гуарды есть?
pragma once / ifndef_define_endif
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
есть
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
Wild_Wind
Глобальные переменные - очень плохо.
А глобальный переменные без неймспейса - вообще ад.
В моём случае, я использую их как константы (например гравитационная константа притяжения и прочее)
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Тёма
Столкнулся с проблемой:

main.cpp:
#incluse <A.h>

A.cpp:
#incluse <A.h>

A.h:
#include <B.h>

B.cpp:
#include <B.h>

B.h:
#include <config.h>
extern int val;

config.h:
int val = 0;


Ошибка:
multiple definition

Подскажите, что здесь не так?
А вообще это бад дезигн.
Очень бед дезигн. Только если ты не хочешь изменять значения val в зависимости от того, что слинкуешь.
Но это очень дурнопахнущее решение.
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
Тогда как лучше?
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Тёма
В моём случае, я использую их как константы (например гравитационная константа притяжения и прочее)
А, понял.
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Зачем только extern ?
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
/* config,hpp */
constexpr int vlaue = 42;

/* A.hpp */
#include "config.hpp"

/* A.cpp */
#include "A.hpp"
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
спасибо
источник

A

Andrew in IT KPI C/C++ ХВ (не UB)
Тёма
В моём случае, я использую их как константы (например гравитационная константа притяжения и прочее)
Тогда использовать конст или дефайн
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Andrew
Тогда использовать конст или дефайн
Выкинуть и то и то, юзать constexpr.
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
а если пользователь может изменить эти переменные?
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
Тёма
а если пользователь может изменить эти переменные?
Тогда это плохой код.
Но если нужен синглтон - то юзай static.
источник

W

Wild_Wind in IT KPI C/C++ ХВ (не UB)
/* config,hpp */
static int vlaue = 42;

/* A.hpp */
#include "config.hpp"

/* A.cpp */
#include "A.hpp"

vlaue = 99;
/* end A.cpp*/
источник

A

Andrew in IT KPI C/C++ ХВ (не UB)
Wild_Wind
Выкинуть и то и то, юзать constexpr.
А, ты прав. У меня сишка головного мозга
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
Wild_Wind
Тогда это плохой код.
Но если нужен синглтон - то юзай static.
Тогда как правильно это сделать?
источник

Т

Тёма in IT KPI C/C++ ХВ (не UB)
Wild_Wind
/* config,hpp */
static int vlaue = 42;

/* A.hpp */
#include "config.hpp"

/* A.cpp */
#include "A.hpp"

vlaue = 99;
/* end A.cpp*/
так?
источник