Linux C编程学习之C语言简介---预处理、宏、文件包含……
C的简介
C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的
C语言的表达能力十分强大。C语言兼顾了高级语言和汇编语言的一些特点,既可以像汇编语言那样直接访问硬件的功能,也具有高级语言那样面向用户容易记忆、便于阅读和书写的优点
C语言的可移植性很好,C语言中没有依赖于硬件的输入输出语句,输入输出功能都是通过调用库函数来实现的,所以在一种计算机平台上开发的程序不需要进行修改或者只需要进行简单的修改就可以移植到另外的一个计算机平台
C语言中具有预处理功能,所以C语言就可以利用宏指令来提高程序的可读性和可移植性
C的开发流程
C是一种编译型语言,所谓编译型语言是指在程序运行之前,需要先经过编译和链接过程:
1) 编辑源文件(获得源文件)
2) 编译源文件(获得目标文件)
3) 链接目标文件及库文件(获得可执行文件)
4) 运行程序(获得运行结果)
对变量定义的理解
比如: int i;
定义一个变量的过程实际上是向内存申请一个符合这个变量的数据类型的存储单元的过程,因此可以认为变量的实质就是内存中某一个单元的格式符,对这个格式符的引用就相当于对相应的内存单元的读取操作
字符数组和字符串
用来存放字符型数据的数组称为字符数组。字符数组的每个数组元素存放一个字符。作为数组的其中一个类型,字符数组的定义、初始化和易用等规则和一般的数组一样
字符串在C 语言中被当做字符数组来处理(其他比如java就是有单独一个String 类型)
需要注意的是:C 语言中字符串的末尾都隐含一个'\0' 字符,因此长度为 n 的字符串在内存中占用 n+1个字节
预处理
预处理是C 语言的一个重要的功能,它是由预处理程序负责完成的。当对一个源文件进行编译时,系统将自动调用于处理程序对文件中的预处理部分进行处理,完成之后才进入对源文件的编译。C语言中提供的预处理功能包括宏定义、文件包含以及条件编译等
设计和编写源程序的时候有效的使用预处理可以提高项目的可移植性……
宏定义
C语言源程序中,使用一个标识符来表示一个字符串,称为宏。程序编译之前,预处理程序会将源程序中的标识符替换为字符串,这个过程称为宏展开
1) 不带参数的宏定义,比如
//#define 宏名 字符串
#define PI 3.1415926 ....
//就可以使用这个宏
c=2*PI*r;
...
2) 带参数的宏定义
//#define 宏名(形式参数) 字符串
#define MAX(a,b) (a>b)?a:b
注意带参数的宏定义,宏名 和 (形式参数)之间是不能有空格的,否则会在展开时出错,假如有空格,就会在调用MAX(a,b) 的时候被替换(a,b) (a>b)?a:b (a,b),所以完全不是我预想的效果。
宏调用对的过程,其实只是一个符号的替换(在编译之前),和函数是完全不同的
文件包含
文件包含是将指定文件的内容插入到当前文件之中。使用文件包含,可以减少程序设计人员的重复劳动,提高程序的开发效率
1) #include<文件名>
在系统设定的目录中进行查找,一般是通过环境变量来进行设定,一般用这种形式包含系统的头文件
2) #include"文件名"
在当前的路径下进行查找,如果没有找到再去系统指定的目录下进行查找,一般用这种形式包含用户自定义的头文件
条件编译
C语言中引入条件编译主要是为了在不同的情况下控制不同的代码段被编译,这样可以将针对不同情况的代码编写在同一个程序文件中,从而方便程序的维护和移植。同时,使用条件编译可以使目标程序变小,运行速度变快
1) #if、#else、#elif、#endif命令
#if 常量表达式
代码段1
#else
代码段2
#endif
如果常量表达式的值为真(非0),编译代码段1,否则编译代码段2
2) #ifdef、#else、#ifndef、#endif命令
#ifdef 宏名
代码段1
#else
代码段2
#endif
如果宏名在前面已经定义过,编译代码段1,否则编译代码段2
Linux C编程学习之C语言简介---预处理、宏、文件包含……的更多相关文章
- Linux 系统编程 学习 总结
背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...
- Linux 系统编程 学习:00-有关概念
Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...
- Linux 系统编程 学习:01-进程的有关概念 与 创建、回收
Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...
- Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道
Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...
- Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号
Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...
- Linux 系统编程 学习:04-进程间通信2:System V IPC(1)
Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...
- Linux 系统编程 学习:05-进程间通信2:System V IPC(2)
Linux 系统编程 学习:05-进程间通信2:System V IPC(2) 背景 上一讲 进程间通信:System V IPC(1)中,我们介绍了System IPC中有关消息队列.共享内存的概念 ...
- Linux 系统编程 学习:06-基于socket的网络编程1:有关概念
Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...
- Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信
Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...
随机推荐
- 通过form上传文件(php)
前段代码 <html> <head> <meta http-equiv="Content-Type" content="text/html; ...
- Android相关学习资料整理
小项目 2015-1-17 记事本 记事本 学习笔记: 结构清晰,简单易懂 2015-1-24 蘑菇街 仿蘑菇街 学习笔记:写博客的一种态度,讲解,配图,代码都很完善,值得学习 相机开发 学习笔记:思 ...
- gulp同步执行任务
使用插件:gulp-sync,npm install --save-dev gulp-sync 使用方法参考:https://www.npmjs.com/package/gulp-sync 这些插件也 ...
- 监控阮一峰老师的blog
引言 阮一峰大家基本都认识,很厉害的一个人,经济学博士,文章写得很棒,知识面很广泛,计算机.算法.英语.文采,这是能想到的他的一些标签,他的博客应该算是最受欢迎的博客之一了. 我经常回去看他的博客,但 ...
- ID还是普通字段做外键合适?
ORACLE:USER表中没有ID字段,只有USERNAME做为一个唯一一字段当主键, COMMENT评论表中有一个user表的外键是用了USER表中的USERNAME字段. 我总认为这不合理,一般情 ...
- TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍
TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...
- CSS 概念 & 作用
http://www.cnblogs.com/moveofgod/archive/2012/09/18/2691101.html 式样定义 如何显示 HTML内容 通常存储在式样表中 作用 : 解 ...
- Spring系列之谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- VBA笔记(二)——基础语法
数据类型 VBA提供了15种标准数据类型,具体见下表: 变量 Sub 变量学习() 'Dim 变量名 As 数据类型 Dim str1 As String '声明定长的String变量 '使用变量类型 ...
- 解决table不能换行的问题与CSS之自动换行总结
table不能换行问题 一般是:一行里面全是数字或是字母或者结尾有多个感叹号而导致 table不能换行,中文默认的会自动换行的,字母不能换行问题:style="table-layout:fi ...