创建宏但没有赋值时,是否有默认值?
#define MACRO
(行尾)。
宏定义的语法为:
#define <IDENTIFIER> <value>
。即使我们不传递值,也会创建宏,可以通过以下程序验证:
#include <stdio.h>
#define MACRO
int main() {
#ifdef MACRO
printf("MACRO was created");
#endif
return 0;
}
此外,如果标识符没有使用
#define
声明但作为 #ifdef <IDENTIFIER>
的条件传递,编译器将标识符视为常量零(假),这可以通过以下程序验证:
#include <stdio.h>
int main()
{
#ifdef A
printf("No print but valid condition");
#endif
return 0;
}
它不打印任何东西,但是编译器没有警告也没有错误。
我的问题是,创建宏但没有赋值时,是否有默认值?
考虑程序:
#include <stdio.h>
#define MACRO
int main()
{
#if defined MACRO
printf("%d", MACRO);
#endif
return 0;
}
获取错误信息:
error: ‘)’ token 之前的预期表达式
如果我们赋值会编译:
#include <stdio.h>
#define MACRO 3
int main()
{
#ifdef MACRO
printf("%d", MACRO);
#endif
return 0;
}
我的猜测是
#define MACRO
没有分配任何值,即使 #ifdef
会将未定义的宏视为 0(或假条件);对吗?
创建宏但没有赋值时,是否有默认值?
不,还是?没有替换列表定义的宏扩展为空,从处理的输入中删除。或者默认值什么都不是,一个空字符串,如果你想那样看的话。
#ifdef ,编译器将标识符视为常量零
#ifdef 会将未定义的宏视为 0
没有。
#ifdef
只关心 defined 是否定义。它不关心扩展的结果。
#if
和 #elif
扩展表达式并将未定义的标记视为 0.
我的猜测是 #define MACRO 没有分配任何值......这是正确的吗?
#define MACRO
printf("%d", MACRO);
扩展为
printf("%d", );
。 , );
部分无效,因此会出现语法错误。