【C语言】预处理器
来源:互联网 发布:网络机顶盒港澳台直播 编辑:程序博客网 时间:2024/05/21 19:38
编译程序的第一个阶段就是预处理操作,包括删除注释,插入,按#include指令包含的文件的内容,定义和替换#define指令定义的符号等;
(1)预处理器定义的符号,它们的值是常量(字符串常量或者是十进制数字常量),如下:
(2)对于宏定义#define name stuff可以替换到任何文本到程序中,不局限与常量,比如for(;;;),在定义宏时,我们最好在整个表达式的两边加上一对括号,为避免展开时简单的文本替换,造成出错;邻近字符串可以自动连接,如"111""222""333";而#arg将被替换为"arg";
(3)函数与宏的主要区别如下:宏是与类型无关的,#define MALLOC(n, type) ((type *)malloc(n*sizeof(type)))是无法用函数来实现的,最主要的是因为type类型;宏很容易带副作用,如比较值x++,y++,getchar()多消耗字符很容易出现这种情况;命名约定为全大写;
(4)条件编译,在linux内核中大量采用了这种方式,如针对makefile中配置的宏定义来打开或关闭某一块代码的编译,常见格式如下:
#if ssstatements#elif ssother statements#elseother statements#endif
在#elif中只有当ss为假时,代码才会被编译;
(5)是否定义;#if defined(symbol)与#ifdef symbol一致,但#if defined(symbol)这个表达更强,可添加额外的条件;还有相反的过程,#if !defined(symbol)也是与#ifndef symbol也是一致的
(6)文件包含,多次文件申明包含,开销只会在程序编译时才存在,而对运行时效率没有影响;但是我们仍可以通过以下表达来消除多次包含的情况;
#ifndef _HEADERNAME#define _HEADERNAME#include<stdio.h>#include<stdlib.h>#endif
- C语言预处理器
- C语言-预处理器
- 【C语言】预处理器
- c语言预处理器
- C语言预处理器
- C语言预处理器
- C语言预处理器
- 【C语言】预处理器
- c语言预处理器指令
- C语言预处理器详解
- C语言的预处理器
- C语言预处理器(十五)
- C语言再学习 -- C 预处理器
- C 语言预处理器(笔记)
- C语言复习之预处理器
- C语言预处理器的几个命令
- c语言预处理
- C语言预处理指令
- LINUX下向服务器传输文件 pscp
- 吐槽一下
- 百姓网校园大使体会
- linux驱动编程--RTC(part one)
- 来自豆瓣:给在读研究生的一封信-我想定期写点东西
- 【C语言】预处理器
- 枚举一个文件夹下的所有文件名
- 华为数字芯片工程师实习生面试全过程
- windowsAPI
- STM32 jtag调试程序时程序跑飞
- 观察者模式
- android之bug收集录(1)
- 尼采:快乐的知识(上)
- python 的 remove 和 pop 好奇怪