c语言if宏
1. c语言中的条件编译 #if define(宏名称)为什么错误了
预编译指令格式错误。
#if define (IBMPC)应改为#ifdef IBMPC
这种结构是为了防止头文件嵌套包含。一般的用法是
#ifndef _IBMPC_H
#define _IBMPC_H
#include"ibmpc.h"
....
#endif
2. #if 及宏定义,是不是C语言里常有这种“开关”用法
#if确实是起到了一个开关作用,但是不同于if语句,if语句只是执行流的变化,最终代码还是被编译了,用#if的话,只有后面为真的情况下才编译,你上面的定义后面需要跟数字,比如
#define USE_Port_B 0
那么相应的代码就不会被编译,说一个简单的情况
#if WINDOWS
//code
#endif
比方说你检查系统的时候,如果是windows的话就定义宏WINDOWS,就是说只有在windows下才会编译code部分
54文人网
3. c语言中的#ifndef,def,endif等宏是什么意思
这些是条件编译。
#ifdef 当后续宏被定义时,代码段会被编译。
#ifndef 当宏未定义时编译。
#endif 条件编译的结束标记。
4. 请问在C语言中#if (0) define .. ; 请问这个宏定义会定义么例如例子: #if (0) define gets(n)
没有说得那么繁琐.
因为对于一个大程序而言,我们可能要定义很多常量( 不管是放在源文件还是头文件 ),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if defined宏正是为这种情况提供了解决方案.举个例子,如下:
#define ....
#define ....
........
........
#define a 100
.......
此时,我们要检查a是否定义(假设我们已经记不着这点了),或者我们要给a一个不同的值,就加入如下句子
#if defined a
#undef a
#define a 200
#endif
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200
同样,检验a是否定义:
#ifndef a //如果a没有被定义
#define a 100
#endif
以上所用的宏中:#undef为解除定义,#ifndef是if not defined的缩写,即如果没有定义。
这就是#if defined 的唯一作用!
5. C语言宏定义意思
我继续回答你的追问:
这个 if 由于后面紧跟了;所以什么也不会做,只是把exp执行了一遍,而后面的exse我觉得可能是笔误,应该是else,那么这个宏的意思其实就是,当exp结果为非0(即false)时,那么执行assertion_failure,后面的参数#exp,诚如前面的解答是exp的字符化,而_FILE_ _BASE_FILE_ _LINE_也都是宏,是在c或c++基本库文件中定义好的,分别当前文件名,主程序文件名和该行代码的行数
最后友情提醒下,宏定义尤其是涉及逻辑代码的,最好放在do{ }while(0)里面,这样可以保证其在大多数条件下都可以正常的执行
6. c语言的宏定义 if defined
没有说得那么繁琐.
因为对于一个大程序而言,我们可能要定义很多常量(
不管是放在源文件还是头文件
),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if
defined宏正是为这种情况提供了解决方案.举个例子,如下:
#define
....
#define
....
........
........
#define
a
100
.......
此时,我们要检查a是否定义(假设我们已经记不着这点了),或者我们要给a一个不同的值,就加入如下句子
#if
defined
a
#undef
a
#define
a
200
#endif
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200
同样,检验a是否定义:
#ifndef
a
//如果a没有被定义
#define
a
100
#endif
以上所用的宏中:#undef为解除定义,#ifndef是if
not
defined的缩写,即如果没有定义。
这就是#if
defined
的唯一作用!
7. C语言: 定义一个宏,比较a、b的大小,不要用大于、小于和IF运算符
代码如下:
#include "stdio.h"
void main()
{
float a, b ,c;
printf ("请输入三个数,会为你从大到小排列! ");
scanf("%f %f %f",&a,&b,&c);
if(a>b>c){printf("%f,%f,%f",a,b,c);}
else if(a>c&&c>b){printf("%f,%f,%f",a,c,b);}
else if(b>a&&a>c){printf("%f,%f,%f",b,a,c);}
else if(b>c&&c>a){printf("%f,%f,%f",b,c,a);}
else if(c>b&&b>a){printf("%f,%f,%f",c,b,a);}
else if(c>a&&a>b){printf("%f,%f,%f",c,a,b);}
//编译器不识别三个连续的符号运算,必须用且(&&)和或(||)he否(!)
}
(7)c语言if宏扩展阅读
C语言中宏定义的优点
方便程序的修改
使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 可以用较短的有意义的标识符来写程序,这样更方便一些。
相对于==全局变量==两者的区别如下:
1、宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。
2、宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。
3、宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。
4、宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不需要extern。
8. #if 及宏定义,是不是C语言里常有这种用法
是的,经常有程序这么用。你可以看看一些经典的开源程序,有很多这样的代码。
9. C语言 #if语句后的宏没定义,会编译错误吗为什么
如果没有定义AAA那么不会报错,也不会以#if 0来处理,而是被忽略
如果定义了AAA ,还要看情况
#define AAA
#if AAA //这个会报错
.....
#endif
===================
#define AAA 666
#if AAA //这个可以
.....
#endif
========
仅仅判断一个宏是否被定义可以用#ifdef
#define AAA
#ifdef AAA //这样就不会有问题
.....
#endif