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. 使用powershell链接到Azure

    一:针对传统的的Azure 的登陆界面: (ASM) 1. 正常来说是 现在本地创建证书文件,然后上传文件,以便本地计算机和Azure建立可靠的安全连接 Get-AzurePublishSetting ...

  2. ubuntu/mint 安装google的拼音输入法

    sudo apt-get install fcitx sudo apt-get install fcitx-googlepinyin im-config 即可完成google的输入法 重启计算机.在右 ...

  3. 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流

    1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 388  Solved: 212[Submit ...

  4. POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)

      题意:规定每次跳的单位 a1, a2, a3 …… , an, M,次数可以为b1, b2, b3 …… bn, bn + 1, 正好表示往左,负号表示往右, 求能否调到左边一位,即 a1* b1 ...

  5. Architectural Model - SNMP Tutorial

    30.3 Architectural Model Despite the potential disadvantages, having TCP/IP management software oper ...

  6. 戴尔OMSA 使用指南

    戴尔的OMSA我们已经安装完成,但是没有web页面.因此我们目前想要看到服务器的相关硬件信息就需要使用命令行的方式获取了.那么,这里就介绍如何使用命令获取服务器硬件信息. 下面是我监控一些硬件信息的命 ...

  7. 数据库大数据处理---复制(SQLServer)

    复制? 复制起初并不是用于作为高可用性功能而设计的,实际上复制的概念就像其名称一样,用于复制数据.比如将某个库中的数据“复制”到另一个库,到另一个实例中,由OLTP复制到OLAP环境中,由某数据中心复 ...

  8. 关于 Word Splitting 和 IFS 的三个细节

    在 Bash manual 里叫 Word Splitting,在 Posix 规范里叫 Field Splitting,这两者指的是同一个东西,我把它翻译成“分词”,下面我就说三点很多人都忽略掉(或 ...

  9. STL学习之运算符(<<)重载问题和仿函数的实现

    /*   运算符<<的重载一直报错,   友原函数中可以访问到类的私有成员*/#include<iostream>using namespace std; class MyIn ...

  10. iphone如何导出微信聊天记录到电脑?

    有个小美眉买了个iphone,但发现自己就是一小白,很多功能都不会用,微信倒是用得挺上手的,可以晚上聊到三四点,流量直接飙升500MB.最近她说手机太卡了,问ytkah帮她整一下.拿起她的IPhone ...