我正在尝试为我的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-condition级联:

#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" : "")

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

10-11 22:09