なぜ最後の2行がstrlen()を使用して警告を引き起こすのか理解できません。コンパイラはこれらを無視してはいけませんか?strlenが符号なし文字配列と符号付き文字配列で使用されるときの警告
size_t len;
char cstr[] = "char string";
signed char scstr[] = "signed char string";
unsigned char ucstr[] = "unsigned char string";
len = strlen(cstr);
len = strlen(scstr); /* warns when char is unsigned */
len = strlen(ucstr); /* warns when char is signed */
コンパイラがこれらを無視するのはなぜですか? 'char *'、 'signed char *'と 'unsigned char *'は互換性のない型です。正式には、これは「エラー」であり、「警告」ではありません。 – AnT