Будет ли компилятор делать разные вещи в зависимости от того, как я обрабатываю параметры, на которые нет ссылок?

Итак, я видел несколько потоков, объясняющих, как избежать предупреждений о параметрах, на которые нет ссылок, например:

Избегайте предупреждения «Формальный параметр без ссылки»
C ++ Какова цель преобразования в void?

Но мне интересно, будет ли компилятор делать что-то другое, в зависимости от того, какой подход используется. Например, будет ли скомпилированный вывод для следующих трех ситуаций отличаться?

void Method(int /*x*/)
{
// Parameter is left unnamed
}

void Method(int x)
{
x;  // This would be the same as UNREFERENCED_PARAMETER(x);
}

void Method(int x)
{
(void)x;  // This would be the same as _CRT_UNUSED(x);
}

Меня это больше всего интересует с точки зрения того, что будет делать компилятор, но если вы решительно настроены на один подход по сравнению с другими, я тоже рад услышать эти аргументы.

2

Решение

Я не вижу причин, по которым компилятор будет относиться к любому другому. Но единственный способ сказать наверняка для вашего компилятора — посмотреть на результаты своего компилятора.

Я бы предпочел первый вариант, так как эта ситуация (неиспользуемые параметры) — это то, для чего была разработана эта языковая функция.

0

Другие решения

Из трех, последний вариант, (void)x; предпочтительнее в большинстве случаев.

Первый вариант, оставляя параметр без имени, является приемлемым, но часто для параметра полезно иметь имя для целей отладки (например, даже если вы не используете параметр в функции, вас может заинтересовать его значение при отладке). Есть случаи, когда этот вариант подходит, например, например, когда делаешь диспетчеризация тегов.

Второй вариант, x; может вызвать другие предупреждения. Visual C ++ выдаст предупреждение C4555 для этого кода:

warning C4555: expression has no effect; expected expression with side-effect

Кастинг x в void с помощью (void)x;Это предупреждение подавлено. (Обратите внимание, что это предупреждение по умолчанию отключено; это предупреждение должно быть явно включено через #pragma или параметр командной строки.)

2

По вопросам рекламы [email protected]