查看: 3061|回复: 1

C预处理器使用方法

[复制链接]

该用户从未签到

发表于 2008-5-26 13:24:17 | 显示全部楼层 |阅读模式
分享到:
常用的预处理指令:#include #define #ifdef ,#else ,#endif ,#ifndef ,#if , #elif , #line , #error,#pragma

编译程序的第一步

对程序进行预处理前,编译器会对他进行几次翻译处理 【对于程序员来说知道这些细节,非常有帮助】,编译器首先将这些源代码中出现的字符映射到源字符集 , 改过程处理多字节字符 和 一些相关的国际化的三元字符扩展

编译程序的
第二步, 编译器查找反斜杠后面紧跟换行符的的实例并删除这些实例 ,接着 将注释由空格符替换掉 。

几个相关命令的介绍

明显常量 #define

该指令的长度, 仅限于一行 ,当然可以扩展物理行 , 这些在预处理前,会被转化成逻辑行 ;如下所示:

#define XANDERNAME "YIHUI\

IS A HERO"

#define NUM 2

每个#define行 由三部分构成 , 第一个就是 define 命令 , 第二个 是缩略语 ,也就是常说的 宏,宏的名字中不允许有空格,必须遵循C变量命名规则 。 第三部分 称谓替换列表 , 也就是 替换的主体部分 。 从宏 到 把程序中的宏被替换 ,这个过程称谓 宏展开 。

注意的地方 :

#define NAME 'XANDER' 与 #define NAME "XANDER" 的区别 , 这种区别 就是 字符 与字符串的区别 , 字符串后面会被追加'\0' 空字符 。

在#define中使用参数

可以创建外形和作用都与函数相似的类函数宏 ,宏的参数也用圆括号括起来 ,定义方法如下:

#define SUM(X) X*X

下面一个宏说明 其使用方法:

#difine SOURCE(X) X*X;

printf("the num is , %d" , SOURCE(2)) ;

类函数宏 与 函数的选择

宏与函数的选择需要考虑程序的时间和空间情况 , 如果在程序中使用宏20次 , 宏产生内联代码 , 会把代码载入20次 ,而使用函数20次, 仅产生一次函数的拷贝 。使用宏的一个优点是 宏不考虑参数的类型 , SOURCE(x)中的x可以是INT型的也可以是float型的 。


#include指令

改指令在web程序的设计中常常用到, 在c中的用法跟那差不多 , 就是载入 你要包含的代码文件 ,像是你手动把代码键入到你要载入的文件里面一样 。 #include 预处理指令有两种定义形式 , #include  第二种是 #include "myfile.h", 在unix中这两种的区别是告诉预处理器在标准系统目录中寻找文件, 而 "" 则首先寻找当前目录 。

列出一些c标准预处理宏:

__DATE__ 进行预处理的日期, __FILE__代表当前源代码文件名的字符串 , __LINE__行号常量,__TIME__源文件的编译时间,格式为"hh:mm:ss"

内联函数

使用内联函数可能简化函数的调用机制 , 但也可能不起作用 ;

创建内联函数的方法是在函数声明中使用函数说明符inline, 如下:

#include

inline void call(void){

printf ("my phonenumber is 1348888888");

}

int main(void){

call();

}

编译器看到内联声明后 ,会用call的函数体去替代 main中的函数调用 ,如同你之前键入到main中一样,需要注意的地方是 ,编译器对内联函数进行优化时 , 需要知道函数体的内容 ,这意味着内联函数的定义和对该函数的调用必须在同一文件内,也就是内联函数通常具有内部链接 。 使用方法一般是在头文件中声明并定义 ,然后将该文件包含到可执行代码中去 。
回复

使用道具 举报

该用户从未签到

发表于 2008-5-26 14:26:27 | 显示全部楼层

RE:C预处理器使用方法

好资料呀

int (* isxx_list[])(int) =
{
isalpha,
isdigit,
isxdigit,
isalnum,
islower,
isupper,
isspace,
isgraph,
isprint,
ispunct,
iscntrl
};
int main()
{
int i, k;
for (i=0; i
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-16 00:34 , Processed in 0.121920 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.