2013-08-30 3 views

ответ

12

Операция ничего не делает во время выполнения и не дает машинного кода.

Он подавляет предупреждение компилятора о том, что p не используется в корпусе функции. Это переносимый и безопасный способ подавить это предупреждение во множестве разных компиляторов, включая GCC, Clang и Visual C++.

+0

означает ли это, что «пустота» - единственный тип, который можно поместить там? – user693986

+1

Если вы разместите там другой тип, некоторые компиляторы будут генерировать предупреждение «заявление без эффекта».Если вы помещаете 'void' там, вы сообщаете как компилятору, так и людям, читающим код, который, как вы знаете, не имеет никакого эффекта, и вы в порядке с этим. Кроме того, любой тип может быть переведен в 'void' в C (в C++, история отличается). –

2

«Cast to void» - это идиома языка C, которая, по соглашению, подавляет компилятор и lint предупреждения о неиспользуемых переменных или возвращаемых значениях.

В этом случае, как правильно указывает Дитрих Эпп, он сообщает компилятору, что вы знаете, что вы не используете аргумент p, а не предупреждаете об этом «неиспользуемые аргументы».

Другое использование этой идиомы, отливка возвращаемого значения функции void, является традиционным способом сказать lint или, что еще более важно, другие программисты, которые вы бы приняли сознательное решение не беспокоить проверки возвращаемого значения функции. Например:

(void)printf("foo") 

Это будет означать «Я знаю, что printf() возвращает значение, и я действительно проверить это, но я решил не беспокоить».

0

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

С11 §6.3.2.2 пустота

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

Другим способом избежать предупреждений о неиспользуемом параметре функции является:

p = p; 
0

void сообщает компилятор или ворсинки не дает предупреждение , Если переменная никогда не используется, компилятор или lint предложит вам удалить ее.

Если вы не хотите его удалять, вы можете использовать void. Как ссылка: How can I hide "defined but not used" warnings in GCC?

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