Renesas Synergy™

FAQ 1011891 : 可変長引数とW0523082メッセージ(CC-RL)

Q : 質問

RL78コンパイラCC-RLを使用しています。可変長引数を持つ関数を作成しコンパイルすると次のメッセージが出力されるのですが、対処方法を教えてください。 「W0523082:偶数アライメントのオブジェクトを指すポインタが奇数番地を保持しています。」


A : 回答

stdarg.hにて、va_list、va_argは、次のように定義されています。
typedef char __near *va_list;
#define va_arg(ap,type) (*(type *)((ap+=((sizeof(type) + 1) & ~1))-((sizeof(type) + 1) & ~1)))
typeにchar *などの2バイトアラインメントの型を記述した場合、va_argの内容から、char * から int * などへのキャストが行われるため、W0523082が出ます。
va_argでは、apはスタック位置であり、必ず偶数番地になるように演算していますので、2バイトアラインメントの型を奇数番地に配置することはありません。
これはCC-RLの仕様であり、また、警告メッセージを出力しないようにできませんので、警告を無視していただきたいと思います。

適用製品

CS+ (旧 CubeSuite+)
RL78ファミリ用Cコンパイラパッケージ
e² studio
他にご質問がございましたら、リクエストを送信してください