以下陈述的含义是什么:
#define FAHAD
我熟悉以下陈述:
#define FAHAD 1
但没有令牌的#define语句是什么意思? 它是否类似于常量定义?
答案 0 :(得分:9)
定义一个没有值的常量作为预处理器的标志,可以像这样使用:
#define MY_FLAG
#ifdef MY_FLAG
/* If we defined MY_FLAG, we want this to be compiled */
#else
/* We did not define MY_FLAG, we want this to be compiled instead */
#endif
答案 1 :(得分:6)
这意味着FAHAD
已定义,您可以稍后检查是否已定义:
#ifdef FAHAD
//do something
#else
//something else
#endif
或者:
#ifndef FAHAD //if not defined
//do something
#endif
实际的示例用法是检查您的平台是否可以使用函数或标头,通常构建系统将定义宏以指示在实际编译之前存在某些函数或标头,例如,这将检查{{1可用:
signal.h
检查某些功能是否可用
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif/*HAVE_SIGNAL_H*/
答案 2 :(得分:5)
任何#define
都会导致用替换标记替换原始标识符。如果没有替换令牌,则替换为空:
#define DEF_A "some stuff"
#define DEF_B 42
#define DEF_C
printf("%s is %d\n", DEF_A, DEF_B DEF_C);
扩展为:
printf("%s is %d\n", "some stuff", 42 );
我在42
和)
之间添加了一个空格来表示DEF_C
扩展到的“无”,但至少就语言而言,预处理器的输出是只是一串代币。 (实际的编译器通常会让你看到预处理器输出。这里是否会有任何空格取决于实际的预处理器。对于GNU cpp,有一个。)
与目前为止的其他答案一样,您可以使用#ifdef
来测试标识符是否为#define
d。你也可以写:
#if defined(DEF_C)
例如。即使扩展为空,这些测试也是正面的(即标识符是定义的)。
答案 3 :(得分:0)
#define FAHAD
这将像编译器标志一样,在其下可以完成一些代码。 这将指示编译器编译此编译器选项
下的代码#ifdef FAHAD
printf();
#else
/* NA */
#endif