[C言語]pointer targets in assignment differ in signednessの対処法

C言語でzlibを使おうとしたらコンパイルエラーが出ました。
警告: pointer targets in assignment differ in signedness
警告: assignment makes integer from pointer without a cast

原因

同じ型で異なるsignのポインタ同士で代入をやるとこの警告が出るみたいです。
z.next_out = s;
左辺のz.next_outはBytef型のポインタ、右辺のsはchar型のポインタでした。
ためしに下記のようなサンプルコードを書いたら簡単に再現できました。
warning_pointer_signedness.c
#include <stdio.h>

int main()
{
    int *ip;
    unsigned int *uip;

    uip = ip;

    return 0;
}
$ gcc -Wall warning_pointer_signedness.c
eval/warning_pointer_signedness.c: In function 'main':
eval/warning_pointer_signedness.c:21: 警告: pointer targets in assignment differ in signedness
eval/warning_pointer_signedness.c:21: 警告: 'ip' is used uninitialized in this function

対処法

とりあえず型変換をすれば警告は出なくなりました。
z.next_out = (Bytef *)s;
Bytef, signed/unsigned char,あたりの意味はわかっていません><
カテゴリ:

人気記事