Насколько мне известно, нет никаких инструкций препроцессора для обнаружения строгого алиасинга.
Если вы используете gcc "-Wall", то компилятор предупредит вас о коде, который может нарушить правило строгого алиасинга.
-Wstrict-aliasing
--- Эта опция активна, только если ‘-fstrict-aliasing’
активный. Он предупреждает о коде, который
может нарушить строгие правила алиасинга
что компилятор использует для
оптимизация. Предупреждение не
поймать все случаи, но пытается
поймать более распространенные подводные камни. это
включены в «-Wall». Это эквивалентно
‘-Wstrict-aliasing = 3’
Если код, над которым вы работаете, критичен, вы можете отключить -fstring-aliasing
в gcc. Или, если вы не хотите отключать строгие псевдонимы, я предлагаю посмотреть на вывод asm, чтобы убедиться, что компилятор не выполняет опасных оптимизаций, которые вам не нужны.
В стороне Акауппи сказал в комментариях:
«Restrict» включает строгий псевдоним
оптимизации для конкретных указателей.
Ключевое слово restrict не "напрямую включает ... оптимизации", а скорее дает компилятору больше информации, а эта дополнительная информация косвенно помогает компилятору определить, может ли он применять определенные методы оптимизации.
Хорошее объяснение ключевого слова restrict из документации компилятора TSP DI :
Чтобы помочь компилятору определить зависимости памяти, вы можете указать
указатель, ссылка или массив с ключевым словом restrict. Ключевое слово restrict
спецификатор типа, который можно применять к указателям, ссылкам и массивам. Его использование
представляет собой гарантию программиста, что в пределах указателя
Объявление объекта, на который указывает объект, может быть доступно только по этому указателю. любой
нарушение этой гарантии делает программу неопределенной. Эта практика помогает
компилятор оптимизирует определенные разделы кода, потому что наложение информации
может быть легко определено.