Позволяет ли указание параметров или переменных как __attribute__ ((unused)) компилятору выполнять какие-либо дополнительные оптимизации?

Меня особенно интересует LLVM 4.1, но меня также интересует поведение других компиляторов.

Согласно документации GCC (которую LLVM поддерживает как минимум частично) атрибут unused ведет себя следующим образом:

This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC will not produce a warning for this variable. 

Однако, если компилятор может предупредить вас о неиспользуемых параметрах и переменных, предположительно, он уже знает, какие параметры и переменные не используются, и вам не нужно сообщать ему об этом (тем более, что атрибут unused указывает только на то, что переменная возможно не используется). Следовательно, позволяет ли атрибут unused компилятору выполнять какие-либо дополнительные оптимизации, или его цель состоит только в том, чтобы обеспечить более читаемый код? Кроме того, если атрибут unused на самом деле позволяет компилятору выполнять дополнительные оптимизации, что произойдет, если вы на самом деле в конечном итоге используете параметр или переменную, которая была указана как unused? LLVM (в XCode), похоже, не жаловался на этот случай, хотя, возможно, я компилировал не на правильном уровне оптимизации или с включенными правильными предупреждениями.


person mon4goos    schedule 17.01.2013    source источник
comment
Обратите внимание, что LLVM (clang) — это отдельный компилятор, который принимает некоторые флаги GCC для совместимости со стандартом де-факто.   -  person vonbrand    schedule 20.01.2013
comment
Да, изменил некоторые формулировки в моем исходном посте, чтобы сделать это более понятным.   -  person mon4goos    schedule 30.01.2013
comment
@ Джо, ты имеешь в виду, что любые правки должны быть комментариями?   -  person mon4goos    schedule 21.03.2013
comment
@mon4goos Этот комментарий принадлежал к уже удаленному ответу, и когда он был удален, он переместился на вопрос, поэтому он вырван из контекста. Кстати, хороший вопрос.   -  person Joe    schedule 22.03.2013
comment
@Джо Спасибо! Из любопытства, как вы смогли это понять?   -  person mon4goos    schedule 22.03.2013
comment
После того, как вы превысите 10k, вы сможете увидеть удаленные ответы и их комментарии :)   -  person Joe    schedule 22.03.2013
comment
Ах, есть к чему стремиться!   -  person mon4goos    schedule 25.03.2013


Ответы (1)


__attribute__((unused)) не помогает оптимизации и не означает, что это значение обязательно не используется. Он подавляет предупреждение (если есть причина для этого предупреждения, то есть если значение действительно не используется), вот и все.

person Anton Kovalenko    schedule 17.01.2013
comment
Одно из его применений — это константы в заголовках, которые используются в одних единицах компиляции, а не в других, иначе вы получите бесполезные предупреждения. - person Michael Anderson; 26.09.2013