Мне нужно было перенести указатель файла на один символ назад. Поэтому я использовал fseek(f,-sizeof(char),SEEK_CUR);. И на gcc всё нормально компилировалось, потом я перенёс этот код на Visual Studio 2017 и в нём такая запись уже не компилируется и проект не запускается, хотя красной волнистой линией не подчёркивается.
Выдаёт ошибку применение унарного минуса к типу без знака;результат оставлен без изменения.
Поэтому у меня вопрос: как можно заставить такую запись работать, ведь gcc не ругался. Или как можно по-другому перенести указатель файла на одну позицию назад?
Результат sizeof имеет беззнаковый тип. Применение унарного - к беззнаковому значению не дает отрицательного значения, а дает "завернутое" положительное значение. -sizeof(char) - это SIZE_MAX, огромное положительное значение. Об этом вам и говорит компилятор.
Прекратите извращаться с sizeof и просто напишите -1. Если вы хотите все таки оставить sizeof, то его результат нужно привести к знаковому типу ДО применения унарного -: -(long int) sizeof(char) (не (long int) -sizeof(char)).
Имейте в виду, однако, что такой способ позиционирования не обязан поддерживаться в текстовых потоках.
Это всего лишь предупреждение.
Можно просто его игнорировать, можно выполнить приведение наподобие -int(sizeof(char))
(-(int)sizeof(char) в C) или - чтоб строго соответствовать духу и букве C++ - как
-static_cast<int>(sizeof(char))
Продвижение своими сайтами как стратегия роста и независимости