Это означает, что все остальные виды использования sizeof
. Он вычисляет размер выражения.
В этом конкретном случае я подозреваю, что проверка предназначена для обеспечения некоторого свойства t
(которое должно быть именем типа, а не переменной), которое я не знаю из контекста ... Возможно, это возможно обрабатывать его как указатель (необходимый для индексации массива), который исключает некоторые типы. Комментарий рядом с макросом говорит /* provoke compile error for invalid uses of size argument */
, который, кажется, поддерживает эту теорию.
Обратите внимание, что sizeof
является оператором, а не функцией. Скобки не нужны, за исключением случаев, когда вы хотите напрямую вычислить размер типа, а затем они являются частью выражения (это выражение для выражения). Поэтому для ясности можно написать sizeof t == sizeof t[1] && ...
или, может быть, (sizeof t == sizeof t[1])
.
Это очень хороший стиль для использования, поскольку он «блокирует» размер, вычисляемый соответствующим массивом, вместо повторения типа t
. Итак, если тип должен был измениться, выражение автоматически адаптировалось и все равно вычислило бы правильную вещь.
Многие программисты С, похоже, по какой-то причине предпочитают иметь круглые скобки вокруг аргумента sizeof
.
«Если' t' является переменной массива, 'sizeof (t) == sizeof (t [1])' будет false ", это действительно всегда верно? –
@AndreasGrapentin: Не для массива одного элемента, но тогда вы можете получить предупреждение компилятора для индексации массива за пределами границ. – interjay