Я пишу код, как это:Является ли ptr = бесплатным (ptr), NULL безопасным?
#include <stdlib.h>
int main(void)
{
void *kilobyte;
kilobyte = malloc(1024);
kilobyte = NULL, free(kilobyte);
return 0;
}
для симметрии, что приятно. Но я никогда не видел, чтобы кто-то с помощью этой идиомы раньше, так что мне интересно, если это может быть на самом деле непереносимым/небезопасным, несмотря на это Wikipedia цитата:
In the C and C++ programming languages, the comma operator (represented by the token ,) is a binary operator that evaluates its first operand and discards the result, and then evaluates the second operand and returns this value (and type).
Edit: перепутал заказ. Теперь он компилируется на gcc
без каких-либо предупреждений.
'free' не возвращает значение, поэтому линия является плохим. Код даже не печатает, используйте стандартный идеом. – Olaf
AFAIK, оператор запятой сбрасывает значение 'free', которое является' void', и вместо этого использует 'NULL'. И это ** ** менее печатается, если ваш стиль требует последовательного назначения указателей на NULL после их освобождения. –
Нет значения, чтобы отказаться! Вы пытались скомпилировать это, прежде чем спрашивать? Вы нашли доказательство в стандарте, это законно или незаконно? Просьба привести этот раздел. (о, и я попытался с gcc). – Olaf