我们经常遇到在不同机器上运行不同C映像的问题。由于我们的代码仍处于生产阶段,因此我们会继续生成人们使用的二进制文件。通常很多时间花在调试上,以便稍后了解二进制文件是不正确的。
我想知道是否有一些机制可以在编译代码时打印日期和时间,然后我们可以使用它来确保所有二进制文件都是相同的。
有关如何在C中执行此操作的任何想法?我想打印这个图像以及版本号时的时间和日期。
答案 0 :(得分:2)
__DATE__
和__TIME__
宏由编译器预定义,其中包含构建C程序的日期和时间。这些只是格式为"Mmm dd yyyy"
和"hh:mm:ss"
的字符串文字,因此应该易于与任何日志记录或打印系统一起使用。 (这些宏在C11标准第6.10.8.1节中定义)
答案 1 :(得分:2)
这称为版本控制:
首先,添加一个使用编译时字符串__DATE__
和__TIME__
的专用源文件。
例如:
printf("%s %s",__DATE__,__TIME__);
或者,如果您希望能够从这些字符串中提取信息:
char _date[] = __DATE__; // the format is "Jan 1 2000"
char _time[] = __TIME__; // the format is "00:00:00"
// Now use these variables to extract the data...
然后,确保无论何时更改项目中的任何文件,都将重新编译专用源文件。您通常可以在项目设置 pre-build 配置中应用此功能,方法是调用删除与专用源文件对应的目标文件的脚本。
例如,假设专用源文件的名称为version.c
,目标文件的扩展名为obj
,对象文件相对于项目的位置为{{1} }。
如果您通过Windows运行构建工具,则可以调用以下批处理文件:
debug\obj