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语言简介---预处理、宏、文件包含……的更多相关文章

  1. Linux 系统编程 学习 总结

    背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...

  2. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...

  3. Linux 系统编程 学习:01-进程的有关概念 与 创建、回收

    Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...

  4. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  5. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  6. Linux 系统编程 学习:04-进程间通信2:System V IPC(1)

    Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...

  7. Linux 系统编程 学习:05-进程间通信2:System V IPC(2)

    Linux 系统编程 学习:05-进程间通信2:System V IPC(2) 背景 上一讲 进程间通信:System V IPC(1)中,我们介绍了System IPC中有关消息队列.共享内存的概念 ...

  8. Linux 系统编程 学习:06-基于socket的网络编程1:有关概念

    Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...

  9. Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信

    Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...

随机推荐

  1. BeautifulSoup 的用法

    转自:http://cuiqingcai.com/1319.html Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python ...

  2. zabbix 监控web网站性能

    一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...

  3. Python【第四章】:socket

    ocket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Uni ...

  4. Zabbix监控nginx status

    nginx开启status ./configure --with-http_stub_status_module nginx.conflocation /statusx35 { stub_status ...

  5. MySQL基本命令

    1.修改root用户登录密码: [root@17track bin]# /usr/local/mysql/bin/mysqladmin -u root password 'MyPassword' my ...

  6. 面试题目——《CC150》树与图

    面试题4.1:实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. 思路:两个方法,第一种速度较快 package cc150; public ...

  7. sobel算子的一些细节

    1. 形式 Gy 上下颠倒的 (*A表示卷积图像,忽略先): 看得出来,sobel算子感觉并不统一,特别是方向,我们知道matlab的图像格式是,x轴从左到右,y轴从上到下,原点在左上角. 所以,第二 ...

  8. Finalize()、Dispose()、SafeHandle、GC

    Finalize https://msdn.microsoft.com/en-us/library/system.object.finalize%28v=vs.110%29.aspx https:// ...

  9. webstorm常用快捷键

    常用快捷键—Webstorm入门 提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. 快捷键配置 点击“File”-> “setting ...

  10. PHP 连接 MySQL

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...