
#include <stdio.h>
#define LEAP_YEAR(x) (!(x%400) || (!(x%4) &&(x%100)))
int main()
{
int year
printf("year:")
scanf("%d", &year)
if(LEAP_YEAR(year))
printf("%d is a leap year.\n",year)
else
printf ("%d is ont a leap year.\n",year)
}
使用#define定义的函数是否可以在if条件为假的情况下继续执行。一般来说,#define是一个预处理器指令,它用于在编译之前替换文本。因此,它不是一个真正的函数,也不能返回一个值。但是,有一种GNU扩展叫做语句表达式(statement expressions),它允许您在#define中使用if语句,并返回一个值。例如:
#define MAX(a,b) \
({ int _a = (a), _b = (b)\
_a >_b ? _a : _b})
这个例子中,MAX(a,b)会返回两个参数中较大的一个。如果您想在这个宏中加入一个if条件,例如判断参数是否为正数,您可以这样写:
#define MAX_POSITIVE(a,b) \
({ int _a = (a), _b = (b)\ if (_a >0 &&_b >0) \
_a >_b ? _a : _b\ else -1})
这个例子中,MAX_POSITIVE(a,b)会返回两个参数中较大的正数。如果两个参数都不是正数,则返回-1。
请注意,这种方法并不是标准的C语言特性,而是GNU编译器的扩展1。并不是所有的编译器都支持它。而且,在#define中使用复杂的逻辑可能会导致代码难以阅读和调试。
因此,在C语言中使用真正的函数和布尔值(true和false)可能是更好的选择
可以使用条件编译:#if a==1
#define LETTER 1
#else
#define LETTER 2
#endif
注意,a也必须是一个符号常量才可行!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)