gcc c++ zahada
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Neděle Březen 29 18:28:22 CEST 2020
Zdravim, hrabu se v cizim kodu a narazil jsem na zajimavy problem.
V objektu je definovana konstanta:
private:
constexpr static const uint16_t sms_handle_period_{30}; //
seconds
a ta pak pouzita v metode:
void
run()
{
....
if (now >= next_sms_handle)
{
next_sms_handle +=
seconds{sms_handle_period_}; //chybovy odkaz je sem
...
Pokud je zapnuta optimalizace O3, neni problem. Pokud vypnu optimalizace
na O0, tak linker hlasi chybu:
D:\Work\_Bednar_IOT\LinuxBuild\Workspace\Include/manager.h:210:
undefined reference to `bednar::detail::manager::sms_handle_period_'
Tusim, ze to bude tim, ze pri optimalizaci se pouzije rovnou konstanta
30 a pamet pro konstantu se vubec nevyhradi, bez optimalizace to bude
brat z pameti.
a dalsi indicie - jsou tam dalsi podobne definovane konstanty, ty jsou v
metodach pouzity ve vyrazech a to je OK. Rozdil je tedy v tom, ze tady
je to pouzito pro inicializaci objektu std::chrono::seconds
Ted ale babo rad, proc vznika ta chyba? Prebornik v C++ nejsem ale co
jsem se snazil nastudovat, melo by to snad takto fungovat?
Další informace o konferenci Hw-list