link text で参照した単一リンクリストのリストを印刷しようとしています。動作しますが、コンパイラの警告が表示されます。
Initialization discards qualifiers from pointer target type
(start = headの宣言時)および
return discards qualifiers from pointer target type
(returnステートメントで)このコードで:
/* Prints singly linked list and returns head pointer */
LIST *PrintList(const LIST *head)
{
LIST *start = head;
for (; start != NULL; start = start->next)
printf("%15s %d ea\n", head->str, head->count);
return head;
}
XCodeを使用しています。何かご意見は?
この部分です:
LIST *start = head;
関数のパラメーターは定数へのポインター、const LIST *head
;これは、それが指しているものを変更できないことを意味します。ただし、上記のポインターは非constを指します。それを逆参照して変更することができます。
const
である必要もあります:
const LIST *start = head;
同じことが戻り値の型にも当てはまります。
コンパイラが言っているのは、「ねえ、あなたは呼び出し側に「私は何も変えない」と言ったが、あなたはその機会を開いている」
次の関数では、遭遇した警告が表示されます。
void test(const char *str) {
char *s = str;
}
3つの選択肢があります。
Paramのconst修飾子を削除します。
void test(char *str) {
char *s = str;
}
ターゲット変数もconstとして宣言します。
void test(const char *str) {
const char *s = str;
}
型変換を使用します。
void test(const char *str) {
char *s = (char *)str;
}