Loose-Info.com
Last Update 2021/10/19
TOP - 各種テスト - gcc - 警告関連のオプション - -Wcast-qual

-Wcast-qual
ポインタがキャストされる際、型修飾子が外された場合などに警告を出力

テスト概要

オプション無し、および-Wcast-qualオプションを使用した際の警告出力例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル


sample.c
#include <stdio.h> int main(void) { const char c0[10] = "abcde"; const char *p0 = c0; /* const修飾子を外して型キャスト */ char *p1 = (char *)p0; *p1 = 'f'; printf("%s\n", p1); char **p2; char *pp[3]; char c1[10] = "fgh"; p2 = pp; *p2 = c1; /* 宣言時と異なり、const修飾子を付けて型キャスト */ const char **p3 = (const char **)p2; **p2 = 'i'; printf("%s\n", *p3); return 0; }

動作テスト

オプション無しでコンパイルを実行
$ gcc sample.c 警告無し $

-Wcast-qualオプション使用してコンパイルを実行
$ gcc -Wcast-qual sample.c sample.c: In function ‘main’: sample.c:9:13: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual] char *p1 = (char *)p0; ^ sample.c:21:20: warning: to be safe all intermediate pointers in cast from ‘char **’ to ‘const char **’ must be ‘const’ qualified [-Wcast-qual] const char **p3 = (const char **)p2; ^ $ 以下2種類の警告が発生 (1)型キャストの際にconst修飾子を外した事に対する警告 (2)安全のために途中のポインタを含め一律にconst修飾子の付加を求める警告