Еще лучше, когда вы устанавливаете cygwin, выбирайте пакеты openssh, perl и emacs. Затем установите демон ssh, используя ssh-host-config -y, и следуйте инструкциям . Теперь вы можете подключиться к своей машине с Windows из своего Linux-бокса, с радостью использовать vi или emacs и разрабатывать на Perl, запускать свой код perl или любую другую командную строку Windows exe, Java или Python и т. Д., Если они являются консольными приложениями. (против графического).
Знаете, есть причина, по которой существуют стандартных документов (3,8 МБ PDF) ; C99, раздел 6.5.3.4, §2:
Оператор
sizeof
возвращает размер (в байтах) своего операнда, который может быть выражением или заключенным в скобки имя типа. Размер определяется от типа операнда. В результат - целое число. Если тип операнд представляет собой массив переменной длины type, операнд вычисляется; в противном случае операнд не оценивается и результат является целым числом константа .
В ответ на комментарий ibread, вот пример для случая массива переменной длины C99:
#include <stdio.h>
size_t sizeof_int_vla(size_t count)
{
int foo[count];
return sizeof foo;
}
int main(void)
{
printf("%u", (unsigned)sizeof_int_vla(3));
}
Размер foo
больше не известен во время компиляции и должен быть определяется во время выполнения. Сгенерированная сборка выглядит довольно странно, поэтому не спрашивайте меня о деталях реализации ...
Он заменяется константой (4 в вашем случае) во время компиляции. Потому что для хранения int на вашей платформе требуется 4 байта.
И ваш код не будет компилироваться, вместо того, чтобы давать вам какой-либо вывод ;-) Из-за sizoef
; -)
Размер возвращаемого типа вычисляется во время компиляции, нет дополнительных затрат времени выполнения
sizeof
- это оператор, а не функция.
Это обычно оценивается как время компиляции - за исключением случаев, когда он используется для переменной длины в стиле C99 массивы.
В вашем примере вычисляется sizeof (int)
, который, конечно, известен во время компиляции, поэтому код заменяется константой и, следовательно, ++
не выполняет ' t существуют во время выполнения для выполнения.
int i=0;
cout << sizeof(++i) << endl;
cout << i << endl;
Также стоит отметить, что, поскольку это оператор, его можно использовать без скобок для значений:
int myVal;
cout << sizeof myVal << endl;
cout << sizeof(myVal) << endl;
Эквивалентны.
Именно для этого он предназначен: непосредственно помещает константу «размер переменной / константы / типа / и т.д.» в код
Sizeof анализирует переданное выражение, чтобы найти его тип. Затем он возвращает размер типа.
Поскольку размер типа всегда известен во время компиляции, он помещается в машинный код как константа.
sizeof () возвращает размер в байтах того, что вы передали ему в качестве аргумента. В 32-битной архитектуре sizeof (int) вернет 4, а sizeof (char) вернет 1.
Вы сами сказали: 'sizeof' не является функцией. Это встроенный оператор со специальным синтаксисом и семантикой (см. Предыдущие ответы). Чтобы лучше помнить, что это не функция, вы можете избавиться от привычки использовать лишние фигурные скобки и предпочесть использовать "sizeof" без скобок с выражениями, как в следующем примере
printf("%d\n", sizeof ++i);
Это в точности эквивалентно вашему исходная версия.
В C ++ sizeof ()
вычисляет размер типа выражение внутри него и заменяет весь вызов функции « sizeof ()
» константой во время компиляции.
Выражение внутри sizeof ()
никогда не вычисляется во время выполнения программы. И это может быть даже не название типа. Ознакомьтесь с этими примерами:
struct X { int i; double j;};
int call_to_undefined_function();
sizeof(10/0);
sizeof( ((struct X*)NULL)->j );
sizeof( call_to_undefined_function() + 100 );
sizeof( call_to_undefined_function() + 100.0 );
sizeof( double() / int() );