У меня есть код, в котором ДОЛЖНА быть включена оптимизация времени ссылки, чтобы работать правильно. Мне нужна постоянная оценка выражения:
extern const char[] PROGMEM constantTable = {1,2,3,4,5};
:
char x = constantTable[4];
(PROGMEM — это конструкция avr-gcc, которая помещает константу в отдельный раздел памяти, который впоследствии загружается во флэш-память, а не в оперативную память, и во время выполнения для доступа потребуется особая осторожность. Но не во время компиляции. ...)
Есть ли способ, которым я могу обнаружить во время компиляции (или во время компоновки), что -flto НЕ был указан, чтобы я мог выдать сообщение об ошибке?
Я уже сравнил предопределенные символы с -flto и без него, используя трюк "-dM -E", и, кажется, нет никаких различий. Есть идеи для других трюков?
(должен ли __builtin_constant_p() "оцениваться" во время компоновки для -flto? Это не так, как в gcc 5.4.0 (последний "поддерживаемый поставщиком" компилятор avr.))
-flto
. Это время выполнения. В теле вопроса вы хотите проверить наличие-flto
во время времени компиляции или компоновки. Что, безусловно, не должно быть проблемой, поскольку ваша система сборки знает, каковы ее параметры компиляции/связывания. - person Mike Kinghan   schedule 09.11.2018