Last Update 2022/12/03
-Wformat-y2k
strftimeフォーマットで、年に関して2桁の値が出力される場合に警告を出力
テスト概要
オプション無し、-Wformat-y2kオプションを使用したコンパイル時の警告出力例
-Wformat無しで-Wformat-y2kオプションのみを使用したコンパイル時の警告出力例
フォーマット文字列で「%y」ではなく、4桁年「%Y」を指定した際の出力例
実行環境
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>
#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;
}
オプション無し、-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
$
-Wformat無しで-Wformat-y2kオプションのみを使用したコンパイル時の警告出力例
-Wformat-y2kオプションのみで実行
$ gcc -Wformat-y2k sample.c
cc1: warning: -Wformat-y2k ignored without -Wformat [-Wformat-y2k]
$ -Wformatがないと無視されるため警告発生
フォーマット文字列で「%y」ではなく、4桁年「%Y」を指定した際の出力例
サンプルコード中の「%y」を「%Y」と変更後実行
$ gcc -Wformat -Wformat-y2k sample.c エラー・警告無し
$ ./a.out
[2021] : 4
$