1. 做什么。文字
2. 分析。 思考
3. 设计。 伪代码
1嵌入式方向。
2图形编程:qt(c++) gtk(c)
3应用程序:vim ls ps等。Linux c开发
4系统:linux(分时);
系统构建(cpu(arm) 内存 硬盘(flash芯片))
5驱动程序:硬件
6硬件:pcb画图工具,设计硬件难
Linux arm嵌入式文件系统
GRUB引导程序 bootloader linux kernel
职位:1GUI编程:qt c++(很难) 3
2C,gcc,gdb,makefile,linuxapi(接口)(apue) 4~5
Apue:文件,多进程,多线程,进程间的通信,网络编程
3系统构建 bootloader linuxkernel 文件系统 1
4 驱动或裸机 3~4
程序=数据+算法
数据来源?
有线:网线
无线:
Svn,cvs 上传工具,版本管理软件
段错误:两行
Printf(“=============\n”);
Printf(“+++++++++++++\n”);找到所有段错误
10->100->1000->10000
200(10个程序)
练习题:统计指定目录中所有.c文件的行数
Wc *.c
Mmap+memmove+truncate文件内容修改
Mytt abc xyz file
Mytt xyz a 八皇后问题
C笔记
- 自己的笔记
- 代码
C语言概述
为什么学习C语言?
为什么要编程?
答:让计算机作事情
二进制 -> 编程语言 -> 自然语言
c/c++
编译类:C,C++(效率高)
解释类:shell,python(脚本),java.
思想 -> a.c -> a.out
Vi+c语言语法 a.c gcc a.out 二进制文件
Gcc
Gcc a.c –o a 把a.c编译成a.out elf 可执行文件
Gcc –E #号开头去掉
Gcc –S 把C -> 汇编
I=9;
Fun (i++,++I,++I,i++)
不同编译器不同
Gcc –c(小写) 二进制做库.libc
Gcc –L 增加搜索库的路径
Gcc –l -lpthread编译时加载指定的库
Gcc –I 增加搜索头文件的路径
Gcc –g 调试版本 a.out 有a.c 源代码 gdb使用 objdump反汇编
Gcc –Wall 警告
Gcc –O0~9 编译优化
Volatile int a;易变,防止优化
Const int a;不可变
Gcc –std=c99 a.c 对c99标准的支持 c89
For ( int i=1;i<10;i++)
Gcc –DN=9 条件编译 #define N 9(很有用)一个代码两个版本
-Ddug 调试 release 发步信息
#ifndef N
If (i%2==0)
Printf(“%d\n”,i);
#else
Printf(“%d\n”,i);
#endif
出错: 编译出错 执行出错
A=10; 汇编
.c -> 二进制文件 gcc 编译器
程序=数据+算法
数据的组织形式:数据结构
集合:int a;int b;
线性结构:int arr[10];变长数组 变长结构体
一对一(数组),链表
前提:int arr[x] x变量
Void fun(int x)
{
Int arr[x];
}
Main()
{
Int x=10;
fun (x);
}
树状:一对二,二叉树
图:一对多
算法:操作数据的方法
Vim 的配置文件
/etc/vimrc 全局配置文件
~/vimrc 当用户的配置文件(主目录)
Set number
Set ci 自动对齐
替换 ab .i #include <stdio.h> ab .m int main(int argc, char **argv)
Vim 命令
Ctrl +n 自动补齐;输入模式 必须加载头文件
行首gg=G末尾 命令行 对齐
==单行对齐
Int arr[x]; 栈 sizeof(int)*x
堆Malloc(sizeof(int)*x)
最大线程有限
作业:
1. 思考.helloworld 程序如何执行
如果没有#include <stdio.h>,问题?也能
是谁帮助我们把helloworld输出到屏幕上
2完整定义变量的格式
[][][][] a;
Int a;
- sizeof()运算符
int a;
cha *p=”abcd”;
char *p1[10];
void *p2=”abcd”;
sizeof(int);
sizeof(void);
sizeof(9);
sizeof(‘a’);
sizeof(“abcdefg”);
sizeof(*(void *)p2);