2013-05-29 5 views
3

Я только что видел парень сделал это сегодня, когда я изучал его фрагмент кода:заявление только имя переменной

void doSomething(int param) { 
    // stuffs 
    param; // <-- what does this statement do? 
    // stuffs 
} 

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

+1

Если параметр 'param' не используется иным образом, он должен предотвратить предупреждение о неиспользуемом параметре. Кроме этого, это не имеет никакого эффекта. Тем не менее, это может вызвать другое различное предупреждение об утверждении, не имеющем эффекта. – jrok

+2

Скорее всего, останавливает компилятор, жалующийся на неиспользованный параметр. Но тогда он будет жаловаться, что заявление не имеет никакого эффекта. (Ну, на самом деле это разные варианты, но, вероятно, это компилируется с группами предупреждений, таких как '-Wall -Wextra'). – BoBTFish

+0

. Следуйте по вопросу: если это была встроенная функция, то она может иметь такое же поведение, как выражение выражения gcc; обычно используется в макросах? – Bathsheba

ответ

5

Он может служить для удаления предупреждения об неиспользованных параметрах. Но логически это ничего не делает. Есть лучшие способы удалить предупреждение об неиспользованном параметре. Использование макроса:

UNREFERENCED_PARAMETER(param); 

Или удалив имя параметра из функции:

void doSomething(int /*param*/) { ... 

Я предпочитаю последний, так как это означает, что param определенно не используется. Я видел экземпляры UNREFERENCED_PARAMETER, указывающие, а затем в коде фактически используется параметр.

3

Возможно, это было сделано для предупреждения компилятора о «неиспользуемом формальном параметре». То есть параметр (в настоящее время) не используется нигде в функции, поэтому это использование введено для удаления предупреждения.

Существует несколько других способов сделать это, например. литье его void:

(void)param; 

Однако все они страдают от той же недостаток: они имеют одинаковую юридическую силу, если параметр фактически используется. Поэтому вполне возможно, что вы видите их в верхней части функции, подумайте «ОК, она не использует param», а затем удивляйтесь, когда она делает используйте ее позже.

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

Смежные вопросы