设为首页 加入收藏

TOP

程序猿之--C语言细节15(预处理命令细节#error、运算符#和##、__FILE__、__LINE__)
2014-11-23 19:42:22 来源: 作者: 【 】 浏览:11
Tags:程序 --C 语言 细节 处理 命令 #error 运算 __FILE__ __LINE__

主要内容:预处理命令细节#error、运算符#和##、__FILE__、__LINE__

#include 
  
     /* 包含这个头文件,并不是将其所有函数都链接进程序*/ 

/* ##运算符 */ 
#define MK_ID(n)  i##n    /* 表示将两个记号连接 */ 
int MK_ID(1), MK_ID(2),MK_ID(3); /* 预处理后变成int i1,i2,i3;*/

/* 定义多个type##_max函数,函数返回类型和参数类型用define决定
 * 如GENERIC_MAX(int)则成了int int_max(int x, int y){return}return x > y   x : y; 
 */  
#define GENERIC_MAX(type) \
 		type type##_max(type x, type y) \
 		{								\
		 	return x > y   x : y; 		\
		}

/* 宏定义中如果带有参数则需要加圆括号,如下: */
#define THREE_PI (3*3.1415)
#define TEST(x) ((x)*10)

/* #error用法,error表示一个严重错误,大多数编译器会立即停止编译*/ 
#if INT_MAX > 100000
#error int type is too small 
#endif

/* #line指令用来改变给程序的行编号方式,通常编号是1,2,3,....*/ 

/* #运算符将一个宏的参数转换为字符串字面量*/
#define PRINT_INT(x) printf(#x " = %d\n", x)  /* 效果为PRINT_INT(i/j)==>printf("i/j" " = %d\n", i/j)==>输出i/j = 5*/ 

/* #单独占一行,是所谓的空指令,没有任何作用,一些程序猿用来给条件编译模块之间的间隔*/ 
#if INT_MAX > 1000
#
#error int
#
#endif 

/* 条件编译*/
#define DEBUG   /* 不需要给DEBUG一个值*/
#if defined(DEBUG) 
#endif
int main(int argc, char* argv[])
{
	int i = 10, j = 2;
	PRINT_INT(i/j);
	
	printf("Compiled on %s at %d \n",__FILE__,__LINE__);  /* __FILE__表示当前文件,__LINE__表示当前行,调试时用很好,特别是在嵌入式linux驱动 */ 
	printf("%s || %s \n",__DATE__,__TIME__); /* 还有__DATE__日期,__TIME__时间*/
	printf("%d\n",__STDC__);   /* __STDC__查看编译器是否结果标准C,接受则返回1*/ 
	return 0;
}
  

输出:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言学习常见错误分析 下一篇笔试面试5 实现C库函数strlen

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: