unix网络编程学习笔记2

    看到unix网络编程第七章时,忽然想总结一下C语言的预处理器的有关知识了。

1.预处理器的功能

      在真正开始编译之前C预处理器会对源文件进行预处理,也叫做预编译,主要有三个功能。

      (1)将源文件中以”include”格式包含的文件的内容复制到预编译的源文件中。
      (2)用实际值替换用“#define”定义的符号(即进行宏替换)。
      (3)根据“#if”后面的条件决定需要编译的代码。
以#开头的命令行(#前可以有空格)就是预处理器处理的对象。他们可以出现在任何地方,预处理的过程分为几个阶段:

      首先将三字符序列替换为等价字符,其次将指令行中位于换行符之前的反斜杠删除掉,以把个指令行连接起来,将程序分成用空白符分割的记号(注释将被替换为一个空白符),接着执行预处理指令,并进行宏扩展。之后将转义字符替换成等价的字符,把相邻的字符串字面值连接起来,搜集必要的程序和数据。

2. 行链接

           用反斜杠\进行连接

3. 宏定义和扩展

        宏定义指令:#define  标识符   记号序列

                    #undef  标识符:用于取消标识符的预处理器定义。将其应用于未知标识符(没有用#define定

                                    义的标识符)并不会出错。

        文件包含指令:#include  <文件名>

        条件编译指令:每个条件编译指令都要占一行,条件编译指令有:

               #if  常量表达式       #ifdef   标识符   #ifndef  标识符    #elif  常量表达式   #else

               #ifdef   标识符 等价于 #if  defined  标识符         #ifndef  标识符 等价于 #if   ! defined  标识符

其他的不常用的预处理指令:

#line   #error  #pragma

   #line指令的使用:

        这个宏通常是和__LINE__宏一起使用的,__LINE__宏表示当前c语句在源文件中的行数,以前也只是在书上看到过,写过一些实例小程序,实际应用中并无使用。

   好了,废话不说,举个例子来说明 #line宏的使用:
     1:#include "iostream"
     2:#line 100
     3:using namespace std;
     4:
     5:int main(int argc, char* argv[])
     6:{
     7:cout<<"__LINE__:"<<__LINE__<<endl;
     8:
     9:  return 0;
     10: }
 
      输出结果是:__LINE__:104
 
      本来应该是输出:__LINE__:7,因为“cout<<"__LINE__:"<<__LINE__<<endl;”语句在第7行;
但是有了#line 100 ,则从“#line100”所在行的下一行被认为是第100行,所以输出的行号是104了。

具体例子:

两个头文件的内容:

study.h

#include "study1.h"
char * study(int,int);

study1.h

int study1(int,int);

hong.c

#include "study.h"
/*good good good*/
int study1(int a,int b)
{  return a+b; }

预处理结果:可以看到预处理结果把注释去掉了,而且把两个头文件的内容拷贝了过来。


# 1 "hong.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hong.c"

# 1 "study.h" 1
# 1 "study1.h" 1
int study1(int,int);
# 2 "study.h" 2
char * study(int,int);
# 3 "hong.c" 2

int study1(int a,int b)
{ return a+b; }




Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值