Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Странная реакция компилятора на постфиксный инкремент
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Harvester
Добрый день.
Имеется такая функция:
Код
int GetFileCountInDir(PCHAR Dir, WORD *FileCount)
{
...
*FileCount++;
...
}

На выделенную строку компилятор (ADS 1.2) выдает предупреждение:
C2917W: no side effect in void context: 'unary *<expr>'
и в итоговом коде вместо инкремента содержимого по указателю инкрементируется сам указатель.
Если я ставлю *FileCount += 1, то все работает, значит дело не в приоритетах.
Подскажите плиз, почему так происходит (в стандарте С99 ничего похожего не нашел).
psL
к содержимому указателя видимо д.б. (*FileCount)++;
gerber
Постинкремент предписывает сначала использовать переменную в выражении, потом её инкрементировать. В вашем случае переменной является указатель FileCount, поэтому сначала происходит разыменование указателя, потом инкремент указателя. Поскольку разыменованное значение нигде не используется - компилятор предупреждает об этом.
Harvester
Цитата(_pv @ Dec 9 2015, 16:27) *

Ну вот, а я пользовался таблицей, в которой наивысший приоритет только у префиксного инкремента/декремента, а у постфиксного - наоборот, самый маленький.
Теперь буду знать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.