C语言
文章平均质量分 69
Buliding
这个作者很懒,什么都没留下…
展开
-
预处理,编译, 优化, 汇编, 链接
编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言(目标文件),并且按照操作系统对可执行文件格式的要求链接生成可执行程序。C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件1.编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理转载 2015-01-21 13:28:51 · 417 阅读 · 0 评论 -
typedef和#define的用法与区别
typedef和#define的用法与区别 一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef转载 2015-04-11 21:00:53 · 440 阅读 · 0 评论 -
GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名
1。gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译2。gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名转载 2015-05-24 16:21:15 · 463 阅读 · 0 评论 -
在Linux中创建静态库和动态库范例 (hello.c)
# gcc -o hello main.c -L. -lmyhello# ./helloHello everyone!#我们删除静态库文件试试公用函数hello是否真的连接到目标文件 hello中了。# rm libmyhello.arm: remove regular file `libmyhello.a'? y# ./helloH转载 2015-05-24 15:36:51 · 384 阅读 · 0 评论 -
enum枚举
一,两者的用法 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表};枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。enum status{ copy, delete};枚举类转载 2015-04-11 22:28:28 · 501 阅读 · 0 评论 -
#ifndef/#define/#endif使用详解
想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 其实“被重复引用”是指一个头文件在同一个cp转载 2015-06-17 09:49:19 · 359 阅读 · 0 评论 -
char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on
本文测试环境 : X86-64 bit 架构的服务器CentOS x64 5.xgcc version 4.1.2 20080704指针和数组是C的比较难搞懂的知识点, 需要结合内存来学习, 非常感谢各位兄弟为我指点迷津.下面总结一下 : 首先说明一下C程序在运行时, 不同的内容或变量分别存储在什么地方?分了几块区域分别是, code转载 2015-05-13 10:41:48 · 392 阅读 · 0 评论 -
C语言枚举类型
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再转载 2015-04-11 21:58:24 · 315 阅读 · 0 评论 -
再谈下声明、定义、初始化、赋值和extern
虽然定义也是声明,但为了方便说明问题,下文中的声明只是单纯的声明,定义就只是定义。1. 声明、定义、初始化和赋值四个术语有着本质的不同,虽然有时候看起来差不多甚至完全一样,但如果不搞清楚很容易出现错误,或者错了不知道怎么改。 2. a: extern关键词用来表明这是一个声明:extern int I;变量i就是一个声明。声明前面一定要有一个关键字extern,没有这转载 2015-04-12 12:11:48 · 2323 阅读 · 0 评论 -
“函数声明”、“函数原型”与“函数定义”辨析
对函数的“定义”和“声明”不是一回事。函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型以及函数体等,它是一个完整的、独立的函数单位。而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体。————谭浩强 ,《C程序设计》(第四版),清华大学转载 2015-04-12 10:48:31 · 974 阅读 · 0 评论 -
unsigned char code 是什么
code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。 程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data转载 2015-04-03 20:31:17 · 26105 阅读 · 4 评论 -
嵌入式中的 *(volatile unsigned int *)0x500 解释
C语言中*(volatile unsigned int *)0x500的解释:如下;(unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int *)0x500=0x10:对地址为0x500赋值为0x10其中volatile关键字有以下用途:(1)用来同步,因为同一个东西可能在不同的存储介质中有多个副本,有些情况下会使得这些转载 2015-02-10 16:12:51 · 2102 阅读 · 0 评论 -
no newline at end of file
GCC中如果文件最后不加上一行空行的话,就会冒个warning:no newline at end of file。在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals转载 2015-01-21 13:05:42 · 503 阅读 · 0 评论 -
C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从转载 2017-07-02 11:33:01 · 186 阅读 · 0 评论