Возможный дубликат:
Почему оператор sizeof?
Почему sizeof
должен быть оператором в C, а не функцией?
Его использование похоже на использование вызова функции, как в sizeof(int)
.
Это должна быть какая-то псевдофункция?
Возможный дубликат:
Почему оператор sizeof?
Почему sizeof
должен быть оператором в C, а не функцией?
Его использование похоже на использование вызова функции, как в sizeof(int)
.
Это должна быть какая-то псевдофункция?
Потому что это не функция; невозможно написать функцию, которая может принимать тип в качестве аргумента и возвращать его размер! Также обратите внимание, что sizeof
реализуется во время компиляции и что скобки не нужны, если вы используете его для переменной.
Вызов функции оценивается во время выполнения. sizeof
должен быть оценен во время компиляции (хотя я считаю, что C99 вводит некоторые исключения из этого)
Функция в C не может делать то, что должен делать sizeof.
Функция по определению выделяет пространство во время выполнения и может работать только с данными.
Хотя sizeof также работает с типами данных, которые зависят от компилятора. Функция не знает, как интерпретировать тип данных "int" и запрашивать у компилятора его размер по своей задумке.
Раньше C99 sizeof был полностью во время компиляции, но в новом стандарте его можно использовать для получения информации и во время выполнения для массивов переменной длины.
функция - это то, что вы можете вызвать во время выполнения. sizeof понимает только компилятор.
sizeof действует во время завершения, а не во время выполнения. Вам нужен только (), когда вы вводите такой тип, как sizeof (int), но если 'i' имеет тип int, вы можете сделать sizeof i
sizeof foo++
не выглядит как вызов функции, не вычисляетfoo++
, аint
вsizeof(int)
не является выражением. - person R.. GitHub STOP HELPING ICE   schedule 17.10.2010