Почему Visual Studio ругается на fseek(f,-sizeof(char),SEEK_CUR)

135
01 февраля 2020, 01:40

Мне нужно было перенести указатель файла на один символ назад. Поэтому я использовал fseek(f,-sizeof(char),SEEK_CUR);. И на gcc всё нормально компилировалось, потом я перенёс этот код на Visual Studio 2017 и в нём такая запись уже не компилируется и проект не запускается, хотя красной волнистой линией не подчёркивается.

Выдаёт ошибку применение унарного минуса к типу без знака;результат оставлен без изменения. Поэтому у меня вопрос: как можно заставить такую запись работать, ведь gcc не ругался. Или как можно по-другому перенести указатель файла на одну позицию назад?

Answer 1

Результат sizeof имеет беззнаковый тип. Применение унарного - к беззнаковому значению не дает отрицательного значения, а дает "завернутое" положительное значение. -sizeof(char) - это SIZE_MAX, огромное положительное значение. Об этом вам и говорит компилятор.

Прекратите извращаться с sizeof и просто напишите -1. Если вы хотите все таки оставить sizeof, то его результат нужно привести к знаковому типу ДО применения унарного -: -(long int) sizeof(char) (не (long int) -sizeof(char)).

Имейте в виду, однако, что такой способ позиционирования не обязан поддерживаться в текстовых потоках.

Answer 2

Это всего лишь предупреждение. Можно просто его игнорировать, можно выполнить приведение наподобие -int(sizeof(char)) (-(int)sizeof(char) в C) или - чтоб строго соответствовать духу и букве C++ - как

-static_cast<int>(sizeof(char))
READ ALSO
strcpy_s вызывает ошибку [закрыт]

strcpy_s вызывает ошибку [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

145
Обработка исключений C++

Обработка исключений C++

Есть одна исключительная ситуация, но нужно чтобы на нее было 2 разных реакции

184
Крашется компилятор qt

Крашется компилятор qt

При отладки кода на c++, IDE выводит вот такое сообщение: FTH: (11040): * Fault tolerant heap shim applied to current processThis is usually due to previous crashes

145
Ошибка: &ldquo;Не определен базовый класс&rdquo;

Ошибка: “Не определен базовый класс”

Не могу понять в чем ошибка при наследовании, компилятор пишет, что не определен базовый класс, хотя все заголовки и определение класса я сделалВот...

154