-
- А что, constexpr разве в этом случае не поможет (да-да, я именно
про С). - Eddy_Em(Сегодня, 15:40)
- Си-компилятор такое отказывается компилировать. - AlexBi(Сегодня, 16:03)
- робот дает ответы... POV(5 знак., Сегодня, 15:06, картинка, картинка)
- А что не так? Andrew_Q(1 знак., Сегодня, 14:49, картинка)
- Вероятно тут компилер догадался что /2 а потом *2 даст исходное
число. В отдельном файле это дает пустое место, т.е. ноль. Хотя, не
исключаю, что могут быть более продвинутые линкеры чем у clang - AlexBi(Сегодня, 15:42)
- В этом примере вычисления производятся во время выполнения
программы. - SciFi(Сегодня, 15:51)
- Да, плюсовый компилятор по тихой заменяет константу на вычисляемую
константу. В моем случае такое не годится. AlexBi(1 знак., Сегодня, 16:06, картинка)
- Не совсем понятно, зачем брать адрес переменной, которую неизвестно
где разместит компоновщик и потом вычислять половину этого адреса?
Куда целитесь? Не угадаете ведь! Вы ведь не знаете смещения, по
которому разместилась v1, поэтому и не угадаете, где будет
половина. - Nikolay_Po(Сегодня, 16:24)
- v1 не где попало, а на границе программы, поэтому ее адрес несет информацию не только об адресе. - AlexBi(Сегодня, 16:42)
- Что именно делаем, если не секрет? Раз уж в лоб не получается,
может, придумаем следующее по убыванию элегантности решение? - SciFi(Сегодня, 16:20)
- К файлу с прошивкой надо добавить информационную часть, содержащую
название, дату и т.п., и размер, но не в байтах, а в блоках, т.е. в
килобайтах, и что бы длинной это было не 4 байта, а 2 байта. Раньше
это отдельной самодельной утилитой делалось, а тут подумал, что
можно автоматизировать. - AlexBi(Сегодня, 16:38)
- И это делается через адрес переменной? "Файл прошивки", наверное, по-разному можно добавлять, вот там и должны крыться возможности. - SciFi(Сегодня, 17:40)
- Не то... Nikolay_Po(410 знак., Сегодня, 16:45)
- К файлу с прошивкой надо добавить информационную часть, содержащую
название, дату и т.п., и размер, но не в байтах, а в блоках, т.е. в
килобайтах, и что бы длинной это было не 4 байта, а 2 байта. Раньше
это отдельной самодельной утилитой делалось, а тут подумал, что
можно автоматизировать. - AlexBi(Сегодня, 16:38)
- Не совсем понятно, зачем брать адрес переменной, которую неизвестно
где разместит компоновщик и потом вычислять половину этого адреса?
Куда целитесь? Не угадаете ведь! Вы ведь не знаете смещения, по
которому разместилась v1, поэтому и не угадаете, где будет
половина. - Nikolay_Po(Сегодня, 16:24)
- Да, плюсовый компилятор по тихой заменяет константу на вычисляемую
константу. В моем случае такое не годится. AlexBi(1 знак., Сегодня, 16:06, картинка)
- В этом примере вычисления производятся во время выполнения
программы. - SciFi(Сегодня, 15:51)
- Вероятно тут компилер догадался что /2 а потом *2 даст исходное
число. В отдельном файле это дает пустое место, т.е. ноль. Хотя, не
исключаю, что могут быть более продвинутые линкеры чем у clang - AlexBi(Сегодня, 15:42)
- Помнится, когда я пытался изобразить программиста, то использовал структуры, размещаемые в специально выделенном для этого сегменте Flash-памяти. Вроде тогда никаких особых проблем с такими константами не было. - reZident(Сегодня, 14:48)
- С адресами на этапе компиляции вообще сложно. Про адреса компилятор
не в курсе. Про адреса знает только линковщик. А он вычислений не
делает. - =AlexD=(Сегодня, 14:41, +1)
- Очевидно, поэтому в стандарте расписали пункт 6.6 "Constant expressions" и отдельно указали, что можно в инициализаторе: SciFi(333 знак., Сегодня, 15:18, ссылка)
- даже и добавить нечего - Ralex(Сегодня, 14:58)
- По идее, можно заложить метки в файле линкера .ld (или что там у Кейла?) - вроде там простые арифметические действия уместны. И в код вставлять уже готовый символ для линкера, который последний знает как вычислить... - Nikolay_Po(Сегодня, 15:02)
- А что, constexpr разве в этом случае не поможет (да-да, я именно
про С). - Eddy_Em(Сегодня, 15:40)