【发布时间】: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。