Loose-Info.com
Last Update 2022/12/03
TOP - 各種テスト - gcc - 警告関連のオプション - フォーマット文字列関連のオプション - -Wformat-y2k

-Wformat-y2k
strftimeフォーマットで、年に関して2桁の値が出力される場合に警告を出力

テスト概要

その1
オプション無し、-Wformat-y2kオプションを使用したコンパイル時の警告出力例

その2
-Wformat無しで-Wformat-y2kオプションのみを使用したコンパイル時の警告出力例

その3
フォーマット文字列で「%y」ではなく、4桁年「%Y」を指定した際の出力例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


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

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

使用ファイル


sample.c
#include <stdio.h> #include <time.h> int main(void) { char c[10]; time_t tt; struct tm *tptr; size_t n; time(&tt); tptr = localtime(&tt); /* %y : 年(2桁)を出力 */ n = strftime(c, sizeof(c)-1, "%y", tptr); printf("[%s] : %ld\n", c, n); return 0; }

その1

オプション無し、-Wformat-y2kオプションを使用したコンパイル時の警告出力例

オプション無しで実行
$ gcc sample.c エラー・警告無し $ ./a.out [21] : 2 $

-Wformat-y2kオプションを指定して実行
$ gcc -Wformat -Wformat-y2k sample.c sample.c: In function ‘main’: sample.c:15:31: warning: ‘%y’ yields only last 2 digits of year [-Wformat-y2k] n = strftime(c, sizeof(c)-1, "%y", tptr); %yが年の下2桁しか出力しないため警告発生 ^~~~ $ ./a.out [21] : 2 $

その2

-Wformat無しで-Wformat-y2kオプションのみを使用したコンパイル時の警告出力例

-Wformat-y2kオプションのみで実行
$ gcc -Wformat-y2k sample.c cc1: warning: -Wformat-y2k ignored without -Wformat [-Wformat-y2k] $ -Wformatがないと無視されるため警告発生

その3

フォーマット文字列で「%y」ではなく、4桁年「%Y」を指定した際の出力例

サンプルコード中の「%y」を「%Y」と変更後実行
$ gcc -Wformat -Wformat-y2k sample.c エラー・警告無し $ ./a.out [2021] : 4 $