我遇到过这种奇怪的事情,而与预定义的宏玩耍。所以基本上,从不同的文件调用__TIME__
时,出现这种情况:
反正我有可以解决这一问题?为什么会发生这种情况?
所有我做的是来自不同来源的不同功能printf("%s\n", __Time__);
。
为什么会发生这种情况?
从文档:
该宏展开描述,在该预处理器正在运行的时间字符串常量。
如果源文件在不同的时间进行编译,那么时间会有所不同。
反正我有可以解决这一问题?
你可以使用一个命令行工具来生成时间字符串,并通过字符串作为宏定义编译器。这样的时间将是由该命令编译的所有文件相同。
要回答你原来的问题:__TIME__
将是对不同的文件不同,因为它指定当特定文件编译的时间。
但是,你问X-Y problem。为了解决你实际上要做的:
如果你需要一个编译时间值,你就要去让你的构建系统指定它更好。也就是说,make
或任何你正在使用,不知何故产生随机种子,然后传递到编译器的命令行选项来定义自己的预处理宏(例如gcc -DMY_SEED=$(random_value) ...
)。然后,你可以应用,为您编译,并让每个人使用MY_SEED
不过你想要的所有C文件。
嗯,我想你的使用情况是很怪的,但一个简单的方式来获得,同时在所有的文件是在一个源文件中使用__TIME__
,并用它来初始化一个全局变量:
compilation_time.h:
const char *compilation_time;
compilation_time.c:
#include "compilation_time.h"
const char *compilation_time = __TIME__;
more_code.c:
#include "compilation_time.h"
...
printf("%s\n", compilation_time);
如果你真的想构建一个整数,如您的评论(可能是不可移植的,因为它假定ASCII),你可以这样做
seed.h:
const int seed;
seed.c:
#include "seed.h"
const int seed = (__TIME__[0] - '0') + ...;
more_code.c:
#include "compilation_time.h"
...
srand(seed);