C++中#if和#ifdef区别

[复制链接]
查看11 | 回复5 | 2018-3-1 20:57:43 | 显示全部楼层 |阅读模式
怎么感觉是一样的呀?他们有哪些不同?
好像#if后面不能跟宏.会出现:fatal error C1017: 无效的整数常量表达式.不知道大家所说的非零数是一个什么概念呀,能详细说下吗?

回复

使用道具 举报

千问 | 2018-3-1 20:57:43 | 显示全部楼层
在你的例子中,是一样的效果。#ifdef 和 #if defined 的区别在于,后者可以组成复杂的预编译条件,比如#if defined (AAA) && defined (BBB)xxxxxxxxx#endif#if defined (AAA) || VERSION > 12xxxxxxxxx#endif而#ifdef 就不能用上面的用法,也就是说,当你要判断单个宏是否定义时#ifdef 和 #if defined 效果是一样的,但是当你要判断复杂的条件时,只能用 #if
回复

使用道具 举报

千问 | 2018-3-1 20:57:43 | 显示全部楼层
都是条件编译。其原理都是一样的。但是还是有一丁点儿不同。请认真读以下知识,得出不同点。----------------------------------------------------------------
条件编译是指按照给定的条件决定哪些源代码参与编译,而哪些源代码不参与编译,从而使一个源程序在不同编译条件下生不同的目标程
回复

使用道具 举报

千问 | 2018-3-1 20:57:43 | 显示全部楼层
以#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作#if 条件语句程序段1//如果条件语句成立,那么就编译程序段1#endif程序段2//如果条件不语句成立,那么就编译程序段2 #ifndef x//先测试x是否被宏定义过#define 程序段1 //如果x没有被宏定义过,那么就编译程序
回复

使用道具 举报

千问 | 2018-3-1 20:57:43 | 显示全部楼层
你好 这两者都是条件编译指令 不同在于:#if 常量表达式
程序。。。//当常量表达式非零时候才编译本段#endif可以这样使用:#if 常量表达式
程序。。。 //常量表达式非零#else
程序。。。 //常量表达式为零#endif#ifdef 标识符 //标识符经过#de
回复

使用道具 举报

千问 | 2018-3-1 20:57:43 | 显示全部楼层
#if 条件语句程序段1//如果条件语句成立,那么就编译程序段1#endif程序段2//如果条件不语句成立,那么就编译程序段2 #ifndef x//先测试x是否被宏定义过#define 程序段1 //如果x没有被宏定义过,那么就编译程序段1 #endif程序段2 //如果x已经定义过了则编译程序段2的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行