Следующий код не выдает предупреждение с g++ 4.1.1 и -Wall
.
int octalStrToInt(const std::string& s)
{
return strtol(s.c_str(), 0, 8);
}
Я ожидал предупреждения, потому что strtol возвращает long int
, но моя функция возвращает только int
. Могут ли другие компиляторы выдать здесь предупреждение? Должен ли я в этом случае привести возвращаемое значение к типу int?
long -> int
, поскольку они имеют одинаковый размер (по крайней мере, для версий Windows этого тысячелетия). Странно, однако, видеть вызовstrtol
без по крайней мере 3 строк кода проверки ошибок, поэтому лично я бы добавил проверку диапазона, как предлагает Let_Me_Be, или определил функцию в стиле приведения для проверки диапазона. - person Steve Jessop   schedule 11.03.2010