根据时间创建消息宏

标签 c macros printf

我正在尝试为我的 C 程序创建一个宏,以便在 printf 中使用

#define TIME(t) \
    (t->tm_hour >= 6 && t->tm_hour < 12) ? "Good morning":"" && \
    (t->tm_hour >= 12 && t->tm_hour < 18) ? "Good afternoon":"" && \
    (t->tm_hour >= 18 && t->tm_hour < 23) ? "Good night":""

printf函数与下面相同

printf("%s\n", TIME(t));

编译中向我返回警报 C4474

C4474: too many arguments passed for format string

有谁知道这个错误的原因吗?

最佳答案

您需要有 else-conditions 级联:

#define TIME(t) \
   (((t)->tm_hour >=  6 && (t)->tm_hour < 12) ? "Good morning" : \
    ((t)->tm_hour >= 12 && (t)->tm_hour < 18) ? "Good afternoon" : \
    ((t)->tm_hour >= 18 && (t)->tm_hour < 23) ? "Good night" : "")

关于根据时间创建消息宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744391/

相关文章:

Char 到 Hex 不显示字符串的 ASCII 值

c - 在 C 中解析 HTTP 请求行

c++ - 将模板参数传递给 MSVC 中的宏

Clion 文件显示为灰色

c++ - 是否可以根据宏或变量有条件地编译/运行代码?

ios - 使用#define,好的做法?

c - printf 和不安全的格式化字符串

复利计算器 - C

c - 下面的程序集是原子的,如果不是,为什么?

c - 如何在没有 libcurl 的情况下在 C 中发出 HTTP get 请求?