消えゆく世界と流れる未来に最後の灯を since 2006/4/3
struct tm {
int tm_sec; /* 秒 (0-60) */
int tm_min; /* 分 (0-59) */
int tm_hour; /* 時間 (0-23) */
int tm_mday; /* 月内の日付 (1-31) */
int tm_mon; /* 月 (0-11) */
int tm_year; /* 年 - 1900 */
int tm_wday; /* 曜日 (0-6, 日曜 = 0) */
int tm_yday; /* 年内通算日 (0-365, 1 月 1 日 = 0) */
int tm_isdst; /* 夏時間 */
};
となっている模様(Man page of CTIMEより)#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main() {
time_t t;
struct tm *t_st;
for (int i=0; i<3; i++) {
t=time(NULL);
t_st=localtime(&t);
printf("%d %d\n",t,t_st->tm_sec);
sleep(1);
}
}
こんな感じ。
$ gcc a.c -std=c11
$ ./a.out
1434360656 56
1434360657 57
1434360658 58
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main() {
time_t t,t2;
struct tm *t_st,*t_st2;
t=time(NULL);
t2=time(NULL);
t_st2=localtime(&t2);
for (int i=0; i<3; i++) {
t=time(NULL);
t_st=localtime(&t);
printf("%d %d %d\n",t,t_st->tm_sec,t_st2->tm_sec);
sleep(1);
}
}
するとこんな感じ。
$ gcc a.c -std=c11
$ ./a.out
1434360821 41 41
1434360822 42 42
1434360823 43 43
t_st2はt2のアドレスを読んでるはずなのに、tの中身に従って変化しているのがわかる。#include <stdio.h>
#include <windows.h>
#include <time.h>
int main() {
time_t t,t2;
struct tm *t_st,*t_st2;
int i;
t=time(NULL);
t2=time(NULL);
t_st2=localtime(&t2);
for (i=0; i<3; i++) {
t=time(NULL);
t_st=localtime(&t);
printf("%d %d %d\n",t,t_st->tm_sec,t_st2->tm_sec);
Sleep(1000);
}
}
こんな感じで出力される。
> cl a.c
Microsoft(R) C/C++ Optimizing Compiler Version 17.00.61030 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
a.c
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57) : warning C4005: '__useHeader' : マクロが再定義されました。
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\sal.h(2872) : '__useHeader' の前の定義を確認してください
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77) : warning C4005: '__on_failure' : マクロが再定義されました。
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\sal.h(2882) : '__on_failure' の前の定義を確認してください
Microsoft (R) Incremental Linker Version 11.00.61030.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:a.exe
a.obj
> a.exe
1434362419 0 19
1434362420 0 20
1434362421 0 21
おいおい、実装がまるで違うじゃねえか!