码迷,mamicode.com
首页 > 其他好文 > 详细

C复习手记(Day3)

时间:2015-10-26 00:39:22      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

C预处理器

C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。 所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:

指令 描述
#define 定义宏
#include 包含一个源代码文件
#under 取消已定义的宏
#ifdef 如果宏已经定义,返回真
#ifndef 如果宏没有定义,返回真
#if 如果给定条件为真,则编译下面的代码
#else #if的替代方案
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#errror 遇到标准错误时,输出错误消息
#pragma 使用标准化方法,向编译器发布特殊的命令到编译器中
#endif 结束一个#if….#else条件编译快

 

 


预定义宏

 

描述
_DATE_ 当前日期,一个以”MMM DD YYYY”格式表示的字符常量
_TIME_ 当前时间,一个以格式”HH:MM;SS”表示的字符常量
_FILE_ 包含当前文件名,一个字符串常量
_LINE_ 包含当前行号,一个十进制常量
_STDC_ 编译器以ANSI标准编译时,定义为1

 


 

预处理器运算符

C 预处理器提供了下列的运算符来帮助您创建宏

a、宏延续运算符(\):宏太长,单行容纳不了。ex:

#define message_for(a,b)     \  printf(#a “and”#b “….”

b、字符串常量化运算符(#):把一个宏的参数转换为字符串常量ex 

#include <stdio.h>

#define  message_for(a, b)      printf(#a " and " #b ": We love you!\n")

int main(void)
{
   message_for(Carole, Debra);
   return 0;
}
编译运行结果:Carole and Debra: We love you!

 

c、标记粘贴运算符(##)

宏定义内的标记粘贴运算符(##)会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个记

#include<stdio.h>
#define tokenpaster(n) printf ("token" #n " = %d", token##n)
int main(void)
{
   int   
   tokenpaster(34);
   return 0;
}
编译运行结果:token34 = 40

 

d、defined()运算符

预处理器 defined 运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。如果指 定的标识符已定义,则值为真(非零)。如果指定的标识符未定义,则值为假。

参数化的宏   

ex: #define MAX(x,y) ((x) > (y) ? (x) : (y))
函数直接调用MAX(x,y)即可。

 

 


C头文件
如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中。

 

#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif
有时需要从多个不同的头文件中选择一个引用到程序中。例如,需要指定在不同的操作系统上使用的配置参数。您可以通过一系列条件来实现这点
#if SYSTEM_1
   # include "system_1.h"
#elif SYSTEM_2
   # include "system_2.h"
#elif SYSTEM_3
   ...
#endif

强转

整数提升:整数提升是指把小于 intunsigned int 的整数类型转换为 intunsigned int 的过程(Ascii码的转化)

常用的算术转换

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:

技术分享

常用的算术转换不适用于赋值运算符、逻辑运算符 && 和 ||

 

     

                     

C复习手记(Day3)

标签:

原文地址:http://www.cnblogs.com/wrs9527/p/4910050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!