Екзистенциалните спорове ++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++. Първото първо инкрементва, после биде проверяване в лоопа, второто биде проверявано, и после инкрементва, или нещо такова.
Е то това ясно. Ако е имал предвид разбира се, че едното ти връща вече увеличената стойност, а другото увеличава след като ти върне старата.