Loose-Info.com
Last Update 2021/11/03
TOP - 各種テスト - gcc - 警告関連のオプション - -Waggregate-return

-Waggregate-return
構造体や共用体を返す関数の定義・呼び出しがある場合に警告

テスト概要

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

実行環境

GCC-8.2.0
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(); /* 共用体を返す関数の呼び出し */ ^~~~~~~~~~~ $ 集約型を返す関数、およびその呼び出しについての警告