コンパイラーの不具合?
AIX(5.3)の環境でプログラムソースをコンパイルし実行したところ、
コンパイラーのバージョンの違いによる、挙動の違いを発見しました。
これは、コンパイラーの不具合なのでしょうか?
コンパイラーのバージョンは、vacpp 6.0とvacpp 9.0です。
サンプルソースコードと実行結果は以下の通りです
<sample.c>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
int aaa( char * a, char *b,char *c,... )
{
va_list arglist;
char *temp;
printf("1.a=%x\n",&a);
printf("2.b=%x\n",&b);
printf("----------------------\n");
va_start( arglist, a );
printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist);
for( ; (temp = va_arg( arglist, char * )) != 0; ){
printf( "%x=%x=%s\n", arglist, temp, temp );
}
va_end( arglist );
printf("----------------------\n");
va_start( arglist, b );
printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist);
for( ; (temp = va_arg( arglist, char * )) != 0; ){
printf( "%x=%x=%s\n", arglist, temp, temp );
}
va_end( arglist );
printf("----------------------\n");
va_start( arglist, c );
printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist);
for( ; (temp = va_arg( arglist, char * )) != 0; ){
printf( "%x=%x=%s\n", arglist, temp, temp );
}
va_end( arglist );
return 0;
}
int main(void)
{
aaa("1","A","B","C","D",0);
return 0;
}
<コンパイルコマンド>
xlC -o sample sample.cpp
<バージョン6.00実行結果=正しい結果>
1.a=2ff22568
2.b=2ff2256c
----------------------
3.2ff2256c=10002460=A
2ff22570=10002460=A
2ff22574=10002462=B
2ff22578=10002464=C
2ff2257c=10002466=D
----------------------
3.2ff22570=10002462=B
2ff22574=10002462=B
2ff22578=10002464=C
2ff2257c=10002466=D
----------------------
3.2ff22574=10002464=C
2ff22578=10002464=C
2ff2257c=10002466=D
<バージョン9.00実行結果=正しい結果>
1.a=2ff22a48
2.b=2ff22a4c
----------------------
3.2ff22a4c=10000a30=A ←おかしい
2ff22a54=10000a32=B
2ff22a58=10000a34=C
2ff22a5c=10000a36=D
----------------------
3.2ff22a50=10000a32=B ←ただしい
2ff22a54=10000a32=B
2ff22a58=10000a34=C
2ff22a5c=10000a36=D
----------------------
3.2ff22a54=10000a34=C ←おかしい
2ff22a5c=10000a36=D
お礼
ありがとうございます。 できれば、もうちょっと簡潔に○○率という言葉で表現したいです。