【问题标题】:Create __TIME__ and __DATE__ by hand手动创建 __TIME__ 和 __DATE__
【发布时间】:2016-05-23 11:32:07
【问题描述】:

我最近将我的编译器更改为 xc16 gcc 编译器。这个新编译器没有定义预处理器宏__TIME__

我所做的所有研究都让我解释了如何使用 __TIME__ 并且它是标准所要求的,但没有说明它是如何工作的。

目前,我使用__TIME____DATE__ 在编译时创建标记。这会定期检查,如果它比服务器上软件上的标记更旧,则服务器会将新软件下载到设备。没有__TIME__,我无法实现我们的自动更新系统。

我想我需要类似于#define TIME FunctionToGetCurrentTime 的东西,但我没有使用time_t now = time(0); 的运气——显然我错了,因为这是我第一次尝试编写预处理器宏。我只使用了#define 作为值。

【问题讨论】:

  • 请注意__TIME____DATE__ 不是函数,它们是,其替换是常量字符串文字。
  • __DATE____TIME__ 是编译文件的时间,而不是执行程序的时间。如果你的编译器没有实现它,你最好用-D从命令行定义它,用其他程序构造实际的字符串。
  • __DATE____TIME__ 是在 预处理器 运行时定义的宏。试图用编译的 process 运行时计算的值替换它们是行不通的。
  • 看起来像XY problem。请重写您的问题,并告诉我们您实际上想要达到的目标。
  • 如果编译器不提供__TIME__ 宏,则该编译器不是(配置为)Standard C11 compliant compiler 甚至a C99 compliant compiler

标签: c datetime


【解决方案1】:

假设您使用 bash(或其他 POSIX 兼容的 shell):

将以下内容添加到您的 gcc 调用中

-D __DATE__=$(date "+%Y-%m-%d") -D __TIME__=$(date "+%H:%M:%S")

或日期命令的一些标志组合。

标记取自 pmg 的评论。如果您不使用实现 $() 的符合 POSIX 的 shell(我能想到的所有现代 shell),则可以使用反引号 ``。

【讨论】:

  • gcc -D __DATE__=`date "+%Y-%m-%d"` -D __TIME__=`date "+%H:%M:%S"` 独立于 bash 工作:您可以将其集成到 sh 脚本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 2014-12-16
  • 1970-01-01
  • 2020-05-05
相关资源
最近更新 更多