gcc在一台计算机上编译而不是另一台计算机时出错

时间:2014-07-29 00:29:28

标签: c++ gcc gcc-warning

我有一个程序,我在两台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;\" />" );

}

当我更换第一个&#34;%i&#34;时,错误消失了。用&#34;%lu&#34;但是当我在另一台计算机上编译该代码时,gcc会出现相反的错误,并且只会使用&#34;%i&#34;进行编译。

如何在两台计算机上编译此代码,而不必在每次切换计算机时都关掉&#34;%i&#34;

1 个答案:

答案 0 :(得分:1)

正如评论vector::size_t中提到的,取决于平台,可能是32位或64位 格式%zu管理它。

或者,你可以写一些类似的东西:
(我使用C ++ 11,for-range,Raw字符串(不必转义\"),但它也可以在C ++中完成03)

std::ofstream oss; // initialize it with correct value
std::size_t i = 0;
for (const auto& color : grad) {
    oss << R"(<stop id="stop)" << i << R"(" offset=")" << color.perc
        << R"(" style="stop-color: rgb()"
        << color.r << ", " << color.g << ", "<< color.b
        << R"();stop-opacity:1;" />)" "\n"; // you may replace "\n" by std::endl
    ++i;
}