C语言高级语法概述笔记
来源:互联网 发布:成都正规java培训机构 编辑:程序博客网 时间:2024/05/01 03:36
GCC 全称 GNU C compile GNU 是一个开元组织 C 的编辑器 现在 GCC变成了 多种 语言编辑器
作为 嵌入式开发人员对于GCC要非常了解
gcc -v查看默认安装 版本
gcc -o output
gcc -o 输出文件 输入文件
gcc -v -o build 001.c 打印出许多服务信息
预处理
gcc -o a.i 001.c
替换
gcc -E
编译
/usr/lib/gcc/i486-linux-gnu/4.4.3/cc1 -o a.s 001.c
(gcc -S)
汇编
as -o a.o a.s
(gcc -c)
连接
usr/lib/gcc/i486-linux-gnu/4.4.3/collect2 -o build a.o+..................
gcc -o build 001.c
define include 不是关键字 在预处理就已经处理完了 关键字实在编译阶段处理的
硬件芯片操作的最小单位
bit 1 0
预处理中的错误
#include"name" 当前工程编译
#include<name>系统库里编程
not find
gcc -I 查找头文件目录
编译错误
; {}弄错
链接错误 链接就是把.o文件生成一个可执行程序
原材料多了 或不够 就是在编程是 函数 没有写完 但是声明了 或者 写重复了
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -I./inc -o build 001.c abc.c
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# ls
001.c 002.cpp 123.txt abc.c a.i a.o a.s build inc
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -I./inc -c 001.o 001.c
gcc: 001.o: 没有那个文件或目录
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -I./inc -c -o a.o 001.c
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# ls
001.c 001.o 002.cpp 123.txt abc.c a.i a.o a.s build inc
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -c -I./inc -o b.o abc.c
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -o build a.o b.o
root@yxcq-desktop:/mnt/hgfs/mnt/src# ls
001.c 001.o 002.cpp 123.txt abc.c a.i a.o a.s b.o build inc
函数预处理宏 不需要定义 函数库里定义好的
__FUNCYION__,__FILE__,__LINE__
#include<stdio.h>
int main()
{
printf("the %s,%s,%d\n",__FUNCTION__,__FILE__,__LINE__);
return 0;
}
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"002.c" [新] 11L, 107C 已写入
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -o build 002.c
root@yxcq-desktop:/mnt/hgfs/mnt/src# ./build
the main,002.c,5
#include 包含头文件
#define 宏 替换 不进行语法检查
#define 宏名 宏体 加括号
#define ABC 5+3
printf ("the %d\n",ABC*5); 5+3*5 就会出错
#define ABC(x) (5(x))加括号
条件预处理举例
gcc -DABC = #define ABC
#include<stdio.h>
int main()
{
#ifdef ABC
printf("======%s=======\n",__FILE__);
#endif
printf("hello world\n");
return 0;
}
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -o build 003.c
root@yxcq-desktop:/mnt/hgfs/mnt/src# ./build
hello world
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -DABC -o build 003.c
root@yxcq-desktop:/mnt/hgfs/mnt/src# ./build
======003.c=======
hello world
# 字符串化
##连接符号
#define ABC(x) #x
#define ABC(x) day##x
int main()
{
int myday1=10;
int myday2=20;
printf(ABC(ab\n));
printf("the day is %d\n",DXY(2));
return 0;
}
~
~
~
~
~
~
~
~
~
"004.c" 17L, 180C 已写入
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -o build 004.c
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# ./build
ab
the day is 20
关键字
编译器 预先定义了一定意义 的字符串
int a
32关键字
sizeof 编译器 查看内存空间容量的一个工具
#include<stdio.h>
int main()
{
int a;
printf("this is a %d\n",sizeof a);
return 0;
}
return
返回作用
硬件芯片操作的最小单位
bit 0 1
软件操作的最小单位 8bit=1B
8bit =256 最大数据
char a=300 就会溢出
大小
根据编译器来决定
编译器的最优处理大小
系统一个周期所能处理的最大单位 int
32bit 4B INT
16bit 2B INT
char a=3 整型常量
无符号 数据
有符号 数字
内存空间的最高字节 是符号位 还是 数据
大小
float 4B
double 8B
浮点型常量
1.0 2.3 都是 占用 8B
结构体 就是 一些变量累加 组成内存空间
共用体 就是各个变量共用起始地址的一段内存 主要应用一些技巧性代码
枚举
就是一个整型常数的集合
#include"stdio.h"
enum abc{MON,TUE,WEN};
int main()
{
printf("the %d\n",WEN);
return 0;
}
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"006.c" [新] 12L, 97C 已写入
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src#
root@yxcq-desktop:/mnt/hgfs/mnt/src# gcc -o build 006.c
root@yxcq-desktop:/mnt/hgfs/mnt/src# ./build
the 2
typedef
数据类型的别名
int a =10
int b=100
len_t
time_t
len_t a = 10
time_t = 100
更加方便理解
CPU 顺序执行的程序
PC指针
资源属性中位置的确定 由类型修饰符确定
auto
int a 放在内存中可读可写的地方
{}放在栈空间 可读可写
register int a
限制变量定义在 寄存器上的修饰符
定义一些快速访问的变量
编译器尽量安排CPU存储这个a 如果寄存器空间不足时 安排在存储器
&这个符号 对register 不起作用
static
静态
应用场景
三种数据
1)函数内部的修饰
int fun()
{
int a====>static int a
return 0;
}
2)函数外部修饰符
int a=====>staticint a
int fun()
{
}
3)函数的修饰符
int fun();====>static int fun();
extern
外部声明
const
常量的定义
只读的变量
const int a
可以修改
voiatile
告知编译器 编译方法的关键字 不优化
右移 >>
有一个问题 但是负数右移时 符号位 根据 正负数 是1 或是0 如果 while(a)
就会出错 永远不为0
- C语言高级语法概述笔记
- C语言笔记-概述
- C语言笔记,(一)概述
- Web_PHP_基础高级语法概述;
- 《C语言宝典》学习笔记(二):概述
- C语言设计教程笔记_概述
- IOS学习笔记03---C语言概述
- C语言学习笔记 指针概述
- C语言笔记系列(一)--概述
- C语言学习笔记 lesson2 编程概述
- 笔记1——C语言概述
- Java语言高级语法
- Objective-C语言概述及语法初体验
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表
- 嵌入式C语言高级_内存空间 笔记
- C语言自学笔记-第1章 C语言概述
- 传智播客C语言笔记一:C语言课程概述
- C语言学习笔记之 第一讲:C语言概述
- javascript基础
- 无废话WCF入门教程三[WCF的宿主]
- 队列(三):链式存储队列
- myBatis的SQL注入问题
- 无废话WCF入门教程四[WCF的配置文件]
- C语言高级语法概述笔记
- Css浮动
- 无废话WCF入门教程五[WCF的通信模式]
- perl函数substr
- Activity的四种加载模式
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
- INI文件操作
- 在xcode中编译APUE代码
- android gradle初探