У меня есть программа, которую я компилирую на двух компьютерах с Ubuntu. Оба работают под управлением 14.04 и предположительно одной и той же версии gcc. Но когда я компилирую его на одном компьютере, я получаю ошибку
warning: format ‘%i’ expects argument of type ‘int’, but argument 4
has type ‘std::vector<colorgrad>::size_type {aka long unsigned int}’ [-Wformat=]
Я думаю, что оскорбительный код
for (vector<colorgrad>::size_type i = 0; i < grad.size(); ++i) {
fprintf(svgOut, "%s%i%s%f%srgb(%i, %i, %i)%s\n", "<stop id=\"stop", i,"\" offset=\"",grad.at(i).perc ,"\" style=\"stop-color: ",grad.at(i).r, grad.at(i).g, grad.at(i).b, ";stop-opacity:1;\" />" );
}
Ошибка исчезает, когда я заменяю первый «% i» на «% lu», но затем, когда я компилирую этот код на другом компьютере, gcc выдает противоположную ошибку и будет компилироваться только с «% i».
Как мне заставить этот код компилироваться на обоих компьютерах, не отключая "% i" каждый раз, когда я переключаю компьютеры?
%zu
вместоsize_type
. - person eduffy   schedule 29.07.2014