C++中if、#if与#ifdef、#ifndef彼此的区别

如题所述

1、意义不同

#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作
,所以说#if与#ifdef、#ifndef都是,而if是判断语句,不是预编译指令。

2、用法

if是条件语句,在运行的过程中根据条件的值选择执行不同的语句。

#if是条件编译语句,在编译阶段执行,如果后面跟的条件成立,就编译对应的语句。

#ifdef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏已经定义了,就编译对应的语句。

#ifndef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏没有定义,就编译对应的语句。

扩展资料:

C++中if、#if与#ifdef、#ifndef的具体使用方法

一、#ifdef 和 #ifndef 指令 (C/C++)

只要能够使用 #if,就可以使用 #ifdef 和 #ifndef 指令,在定义 identifier 时,#ifdef identifier 语句与 #if 1 等效,当 identifier 未定义或没有使用 #undef 指令进行定义时,该语句与 #if 0 等效。 

这些指令只检查使用 #define 定义的标识符是否存在,而不检查在 C 或 C++ 源代码中声明的标识符。

提供这些指令只是为了实现与该语言的早期版本的兼容性。 优先选择将 defined( identifier ) 常量表达式与 #if 指令一起使用。

#ifndef 指令检查 #ifdef 所检查的条件的相反值。 如果尚未定义标识符(或已使用 #undef 移除其定义),则条件为 true(非零)。 否则,条件为 false (0)。

二、#if :

源文件中的每个#if指令必须与表示结束的 #endif指令匹配,任意数量的 #elif指令可以出现在 #if 和 #endif指令之间。 

但最多允许一个 #else 指令,且 #else指令(如果有)必须是#endif之前的最后一个指令。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-09
if是条件语句,在运行的过程中根据条件的值选择执行不同的语句。

#if是条件编译语句,在编译阶段执行,如果后面跟的条件成立,就编译对应的语句。

#ifdef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏已经定义了,就编译对应的语句

#ifndef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏没有定义,就编译对应的语句
第2个回答  推荐于2017-09-06
以#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作

#if 条件语句
程序段1 //如果条件语句成立,那么就编译程序段1
#endif
程序段2//如果条件不语句成立,那么就编译程序段2

#ifndef x//先测试x是否被宏定义过
#define 程序段1 //如果x没有被宏定义过,那么就编译程序段1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。

#ifdef x //先测试x是否被宏定义过
程序段1 //如果x被宏定义过,那么就编译程序段1
#endif
程序段2 //如果x没有被定义过则编译程序段2的语句,“忽视”程序段1。

if就是判断语句,不是预编译指令本回答被提问者采纳
第3个回答  2010-07-09
加了#的都是宏语句