C有一个预定义的宏__DATE__,它显示已编译源文件的日期.
日期以"Mmm dd yyyy"格式显示.
有没有办法使用宏格式化这个日期?
以这种格式"yyyy Mmm dd".
而不是:
2013年7月19日
应该 :
2013年7月19日
Jen*_*edt 10
在C中,您可以拥有一个宏,可以动态生成具有您喜欢的顺序的复合文字,例如
#define FDATE (char const[]){ __DATE__[7], __DATE__[8], ..., ' ', ... , '\0' }
Run Code Online (Sandbox Code Playgroud)
在所有重要的地方,优化器应该能够有效地处理这个问题.
如果有人正在寻找一种方法来转换Mmm DD YYYY为仅包含 ASCII 数字的字符串YYMMDD (例如"220103"),那么这里是相应的代码。它应该可以在 C 和 C++ 中工作:
#include <stdio.h>
const char version[6+1] =
{
// YY year
__DATE__[9], __DATE__[10],
// First month letter, Oct Nov Dec = '1' otherwise '0'
(__DATE__[0] == 'O' || __DATE__[0] == 'N' || __DATE__[0] == 'D') ? '1' : '0',
// Second month letter
(__DATE__[0] == 'J') ? ( (__DATE__[1] == 'a') ? '1' : // Jan, Jun or Jul
((__DATE__[2] == 'n') ? '6' : '7') ) :
(__DATE__[0] == 'F') ? '2' : // Feb
(__DATE__[0] == 'M') ? (__DATE__[2] == 'r') ? '3' : '5' : // Mar or May
(__DATE__[0] == 'A') ? (__DATE__[1] == 'p') ? '4' : '8' : // Apr or Aug
(__DATE__[0] == 'S') ? '9' : // Sep
(__DATE__[0] == 'O') ? '0' : // Oct
(__DATE__[0] == 'N') ? '1' : // Nov
(__DATE__[0] == 'D') ? '2' : // Dec
0,
// First day letter, replace space with digit
__DATE__[4]==' ' ? '0' : __DATE__[4],
// Second day letter
__DATE__[5],
'\0'
};
int main(void)
{
puts(__DATE__);
puts(version);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Jan 3 2022
220103
Run Code Online (Sandbox Code Playgroud)
反汇编(gcc x86_64):
version:
.string "220103"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8427 次 |
| 最近记录: |