C ++ __TIME__不同于不同的文件调用时

问题描述 投票:0回答:3

我遇到过这种奇怪的事情,而与预定义的宏玩耍。所以基本上,从不同的文件调用__TIME__时,出现这种情况: __TIME__ bug

反正我有可以解决这一问题?为什么会发生这种情况? 所有我做的是来自不同来源的不同功能printf("%s\n", __Time__);

c++ c macros preprocessor
3个回答
3
投票

为什么会发生这种情况?

从文档:

该宏展开描述,在该预处理器正在运行的时间字符串常量。

如果源文件在不同的时间进行编译,那么时间会有所不同。

反正我有可以解决这一问题?

你可以使用一个命令行工具来生成时间字符串,并通过字符串作为宏定义编译器。这样的时间将是由该命令编译的所有文件相同。


1
投票

要回答你原来的问题:__TIME__将是对不同的文件不同,因为它指定当特定文件编译的时间。

但是,你问X-Y problem。为了解决你实际上要做的:

如果你需要一个编译时间值,你就要去让你的构建系统指定它更好。也就是说,make或任何你正在使用,不知何故产生随机种子,然后传递到编译器的命令行选项来定义自己的预处理宏(例如gcc -DMY_SEED=$(random_value) ...)。然后,你可以应用,为您编译,并让每个人使用MY_SEED不过你想要的所有C文件。


0
投票

嗯,我想你的使用情况是很怪的,但一个简单的方式来获得,同时在所有的文件是在一个源文件中使用__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);
© www.soinside.com 2019 - 2024. All rights reserved.