このコードをxlC8.0(AIX 5.3上)でコンパイルすると、間違った結果が生成されます。印刷する必要があります12345
が、代わりにを印刷し804399880
ます。const
の前を削除するresult
と、コードが正しく機能します。
バグはどこにありますか?
#include <stdio.h>
#include <stdlib.h>
#include <string>
long int foo(std::string input)
{
return strtol(input.c_str(), NULL, 0);
}
void bar()
{
const long int result = foo("12345");
printf("%u\n", result);
}
int
main()
{
bar();
return 0;
}
コンパイルコマンド:
/usr/vacpp/bin/xlC example.cpp -g
編集:上記のprintfフォーマット文字列を "%ld\n"に変更しても効果はありません。編集2:使用されたAIXバージョンは6.1ではなく5.3でした。