Екзистенциалните спорове ++i
срещу i++
(за случаите, в които i
е интегрална променлива и не се интересуваме от върнатата стойност) заемат особено място в сърцата на c-програмистите.
От извстно време свикнах да пиша ++i
. Четящите реагират странно на for (i = 0; i < MAX; ++i)
и освен че изглежда по-хакерско поради мързел не бях проучил дали има някаква реална разлика между двата варианта.
Сигурно нямаше да преодолея мързела ако не беше Румен, когото не успях да убедя, че ++i
е по-бързия и по-малко паметоизползващ вариант. Ето тестовете, които направихме:
[nikolay@nikolay c]$ gcc -v Using builtin specs. gcc version 2.95.4 20020320 [FreeBSD] [nikolay@nikolay c]$ less prefix.c #include <stdio .h> int main() { int i; scanf("%d", &i); ++i; return 0; } [nikolay@nikolay c]$ less postfix.c #include <stdio .h> int main() { int i; scanf("%d", &i); i++; return 0; } [nikolay@nikolay c]$ gcc -Wall -S postfix.c -o postfix.asm [nikolay@nikolay c]$ gcc -Wall -S prefix.c -o prefix.asm [nikolay@nikolay c]$ diff postfix.asm prefix.asm 1c1 < .file "postfix.c" --- > .file "prefix.c"
Сега като се замисля няма особен смисъл да се чете числото от стандартния вход, но елементът изненада дава по-малка възможност на компилатора да прояви шмекерските си способности (много е хитро копелето–вервайте ми).
Изводът: ммм, няма особена разлика между двете. Даже никаква. Живейте свободно и не се карайте за глупости. Поне не за тази.
2 replies on “++i vs. i++”
Абе онзи умния по информатика всеки ден говори по въпроса каква е разликата между ++i и i++. Първото първо инкрементва, после биде проверяване в лоопа, второто биде проверявано, и после инкрементва, или нещо такова.
Е то това ясно. Ако е имал предвид разбира се, че едното ти връща вече увеличената стойност, а другото увеличава след като ти върне старата.