Last Update 2021/11/03
-Waggregate-return
構造体や共用体を返す関数の定義・呼び出しがある場合に警告
テスト概要
オプション無し、および-Waggregate-returnオプションを使用した際の警告出力例
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
sample.c
#include <stdio.h>
typedef struct
{
int i;
int j;
} samp_struct;
typedef union
{
int x;
char y[10];
} samp_union;
samp_struct sampFunc1() /* 構造体を返す関数 */
{
samp_struct ss;
ss.i = 1;
ss.j = 1;
return ss;
}
samp_union sampFunc2() /* 共用体を返す関数 */
{
samp_union su;
su.y[0] = 'a';
su.y[1] = '\0';
return su;
}
int main(void)
{
samp_struct ss;
samp_union su;
ss = sampFunc1(); /* 構造体を返す関数の呼び出し */
su = sampFunc2(); /* 共用体を返す関数の呼び出し */
printf("%d %d %s\n", ss.i, ss.j, su.y);
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$
-Wswitch-defaultオプション使用してコンパイルを実行
$ gcc -Waggregate-return sample.c
sample.c: In function ‘sampFunc1’:
sample.c:15:13: warning: function returns an aggregate [-Waggregate-return]
samp_struct sampFunc1() /* 構造体を返す関数 */
^~~~~~~~~
sample.c: In function ‘sampFunc2’:
sample.c:24:12: warning: function returns an aggregate [-Waggregate-return]
samp_union sampFunc2() /* 共用体を返す関数 */
^~~~~~~~~
sample.c: In function ‘main’:
sample.c:39:7: warning: function call has aggregate value [-Waggregate-return]
ss = sampFunc1(); /* 構造体を返す関数の呼び出し */
^~~~~~~~~~~
sample.c:40:7: warning: function call has aggregate value [-Waggregate-return]
su = sampFunc2(); /* 共用体を返す関数の呼び出し */
^~~~~~~~~~~
$ 集約型を返す関数、およびその呼び出しについての警告