Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;打印宏linux-添加日期和时间 < >我的C++ Linux应用程序中,我有这个宏: #define PRINT(format,arg...) printf(format,##arg)_C++_Linux_Macros - Fatal编程技术网

c++;打印宏linux-添加日期和时间 < >我的C++ Linux应用程序中,我有这个宏: #define PRINT(format,arg...) printf(format,##arg)

c++;打印宏linux-添加日期和时间 < >我的C++ Linux应用程序中,我有这个宏: #define PRINT(format,arg...) printf(format,##arg),c++,linux,macros,C++,Linux,Macros,我想给要打印的字符串添加一个日期和时间。(它是一个日志,所以我希望它在运行时带有变量) 如何更改此宏以执行此操作 谢谢是否要将编译时或运行时添加到字符串中?如果前者: #define PRINT(format,arg...) printf(__DATE__ ":" __TIME__ " " format,##arg) #定义打印(格式,arg…)printf(uuuu日期):“uu时间uuuu”格式,35;#arg) 大部分时间都能用 请注意,只有当PRINT的调用仅对格式字符串使用字符串文字

我想给要打印的字符串添加一个日期和时间。(它是一个日志,所以我希望它在运行时带有变量) 如何更改此宏以执行此操作


谢谢

是否要将编译时或运行时添加到字符串中?如果前者:

#define PRINT(format,arg...) printf(__DATE__ ":" __TIME__ " " format,##arg) #定义打印(格式,arg…)printf(uuuu日期):“uu时间uuuu”格式,35;#arg) 大部分时间都能用

请注意,只有当PRINT的调用仅对格式字符串使用字符串文字时,这才起作用。(即,PRINT(“foo”)可以工作,但PRINT(x)如果x是一个变量,则不能工作)


如果需要运行时日期和时间,只需将“%s”附加到格式中,然后添加对函数的调用,该函数将在参数之前返回所需的内容。

如果需要当前日期时间,则必须实现一个常规函数来执行所需操作,因为C宏无法返回所需的数据


请记住,C宏在编译时被C预处理器替换。

假设您需要编译时日期,并且编译器有一个返回日期的
\uuuuuuuuuuuuuuuuuuu

#define PRINT(format,arg...) printf(__DATE__ ": " format,##arg)
如果需要运行时日期,则可以执行以下操作:

std::string format_current_time()
{
   // format the time as you like and return it as an std::string
}

#define PRINT(format,arg...) printf("%s: " format, format_current_time.c_str(), ##arg)

如果需要本地运行时日期,可以使用boost.date\u time

#define DATE_TODAY to_simple_string(day_clock::local_day())
#define PRINT(format,arg...) printf( (DATE_TODAY + ": " + format).c_str(), ##arg)

如果您想要UTC时间,也可以使用
day\u clock::universal\u day()

显然是错误的。不仅
\uuuu DATE\uuuu
存在,而且宏可以轻松包装一些现有的
datestr()
函数
\uuuu DATE\uuuu
返回编译时间,而不是当前时间。@Simone他没有指定他想要的时间。更不用说c宏可以包装函数了call@KitsuneYMG:我想我们可以假设OP想要运行时,而不是编译时,日期,就像他们说的“这是一个日志,所以我想要它在运行时,带有变量”@Tony。可能是的。但是,如果不使用内部版本号/版本,那么编译日期对于确定生成日志条目的软件版本非常有用。因此,编译日志和运行时日志都有有效的用途。由于OP没有说明为什么要在日志字符串中输入日期,我们不知道QED,您使用的是常规函数:如果没有该函数,您就无法检索和打印当前日期时间。将其包装在宏周围只是语法上的糖分。@Simone并完全按照OP的要求执行。试着读他的问题。“如何更改此宏以执行此操作?”有关如何执行此操作的答案,请参见上文。仅仅因为宏嵌入了对实函数的调用,并不意味着它就是一个宏。你能添加一个代码示例来告诉我在哪里附加%s吗?#定义PRINT(format,x)printf(“%s:”format,get_time(),x)作为旁注:变量宏参数,虽然几乎被所有编译器接受,目前C++还没有进入C++标准。@托尼最初的问题是泛型的,没有指定运行时的日期和时间Valgi:我看到OP已经编辑了这个问题,也许你应该编辑你的答案来澄清: