sizeof: оператор или функция?

Возможный дубликат:
Почему оператор sizeof?

Почему sizeof должен быть оператором в C, а не функцией?

Его использование похоже на использование вызова функции, как в sizeof(int).

Это должна быть какая-то псевдофункция?


person Community    schedule 17.10.2010    source источник
comment
Вероятно, потому что sizeof foo++ не выглядит как вызов функции, не вычисляет foo++, а int в sizeof(int) не является выражением.   -  person R.. GitHub STOP HELPING ICE    schedule 17.10.2010


Ответы (5)


Потому что это не функция; невозможно написать функцию, которая может принимать тип в качестве аргумента и возвращать его размер! Также обратите внимание, что sizeof реализуется во время компиляции и что скобки не нужны, если вы используете его для переменной.

person Oliver Charlesworth    schedule 17.10.2010

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

person leonbloy    schedule 17.10.2010
comment
Если у вас нет VLA ... - person Carl Norum; 17.10.2010

Функция в C не может делать то, что должен делать sizeof.

Функция по определению выделяет пространство во время выполнения и может работать только с данными.

Хотя sizeof также работает с типами данных, которые зависят от компилятора. Функция не знает, как интерпретировать тип данных "int" и запрашивать у компилятора его размер по своей задумке.

Раньше C99 sizeof был полностью во время компиляции, но в новом стандарте его можно использовать для получения информации и во время выполнения для массивов переменной длины.

person sarshad    schedule 17.10.2010

функция - это то, что вы можете вызвать во время выполнения. sizeof понимает только компилятор.

person unbeli    schedule 17.10.2010

sizeof действует во время завершения, а не во время выполнения. Вам нужен только (), когда вы вводите такой тип, как sizeof (int), но если 'i' имеет тип int, вы можете сделать sizeof i

person JonH    schedule 17.10.2010