C语言基础 (3) C语言介绍
01回顾
02 语言介绍
语言是人和人交流,C语言是人和机器交流。
03_为什么学C语言
04_第一个C代码编译运行
#include <stdio.h>
int main()
{
// 这是第一个C代码
printf(‘hello world’)
return 0
}
gcc 01.c
3、 return 0 代表程序正常结束
// 使用某个函数前,添加头文件
// 1、头文件类似于菜单,头文件包含函数的声明,菜单列举了菜名,
// 函数调用,相当于点菜
// <>通过包含系统的头文件(标准的头文件),” ” 包含自定义的头文件
man 3 printf
(
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数,如printf,fread
vi usr/include/stdio.h
// 1、函数调用,printf功能往标准输出设备(屏幕)打印内容
// 2、\n代表换行
// 3、函数的调用必须放在{}内部
06 C代码分析总结
头文件什么时候需要包含?
点菜的时候需要包含菜单,所以用函数的时候就需要包含头文件
07 windows通过gcc编译代码
windows编译代码
1) cd 目录
2) dir 查看目录信息
3) gcc hello.c 默认在当前路径,生成a.exe
gcc hello.c -o hello: 生成hello.exe
4) 运行,在windows下运行
./a
或者a.exe
不能写./a.exe
cmd
gcc -v
gcc hello.c
gcc hello.c -o hello
08 补充
gcc(GNU compiler collection, GNU 编译器套件), 是由GNU开发的编译语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X 等)采纳为标准的编译器,gcc同样适用于微软的Windows。
gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、…Object C、Object C++、Go语言的编译器大家族。
linux编译的只能在linux运行 32只能在32 64只能在64。
windows编译只能在window运行 32的可以在64运行, 64只能在64运行。
09 System调用命令
man 3 system
system函数的使用
#include <stdio.h>
int system(const char* command);
功能:在已经运行的程序中执行另外一个外部程序
参数:外部可执行程序名字
返回值:不同系统返回值不一样
# include <stdio.h>
# include <stdlib.h>
int main(){
printf(‘before sys\n’)
system(‘ls -alh’) //取决于程序当前所在的目录
printf(‘after sys\n’)
return 0
}
11. system调用外部程序
#include <stdio.h>
# include <stdlib.h>
int main(){
printf(‘asdsad’)
system(‘waibu) //外部也是一个编译好的文件
printf(‘after sys’)
}
13 system不同系统返回值不一样
# include <stdio.h>
# include <stdlib.h>
int main(){
printf(“before sys\n”)
// 1 需要头文件 #include <stdlib.h>
// 2 system功能: 调用外部程序
int a = system(“waibu”) // .\waibu.exe
printf(“a = %d\n”,a)
printf(“after sys\n”)
return 0
}
waibu
# include <stdio.h>
int main(){
return 250
}
windows下输出250
linux下输出的不是250
结论:C语言所有的库函数的调用,只能保证语法是一致的,但不能保证执行结果是一致的,同样的库函数在不同的操作系统下执行结果可能是一样的,也可能是不一样的。
在学习Linux发展史时,我们得知Linux的发展离不开POSIX标准,只要符合这个标准的函数,在不同的系统下执行的结果就可以一直。
Unix和Linux很多库函数都是支持POSIX的,但Windows支持的比较差,如果将Unix代码一直到linux一般代价很小,如果把Windows代码一直到Unix或者Linux就比较麻烦
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。
14 字符串编码介绍
1)windows默认支持的中文编码为gbk,gb2312,ANSI,
2)linux默认支持的中文编码为utf-8(Unicode
15 Qt调用system
只在windows有效
calc
mspaint
Qt调用system
17 MFC调用system
qt可以用来做界面
MFC( Microsoft foundation class) 是微软出的做界面的,在Visual Studio里面使用
18 GCC编译过程
预处理和 链接一定是确定的两个步骤。 编译和汇编 是不确定的(有些书本是反过来的)
包含头文件的作用:
// 定义一个变量a,类型为整型
int a;
预处理: 宏定义
(其实是把左边的放到右边了)
*其实可以分步编译:
怎么记呢? Esc iso
gcc -E hello.c -o hello.i
预处理:在包含头文件的地方把头文件放进来。
(头文件展开)
编译:gcc -S hello.i -o hello.s
(已经是汇编语言了,生成了汇编文件)
gcc -c hello.s -o hello.o
(已经是目标文件了,还需要链接一些库什么的)
gcc hello.o -o hello
(现在就可以运行了)
ldd hello 呈现出需要哪些动态库
windows:
dependency walker软件(用这个软件查看一下 需要哪些动态库)
linux:
可以用ldd命令来查看
19 课堂答疑:动态库的作用
写的程序,通常都需要函数调用
1)函数调用类似于点菜
2)函数调用可能需要链接动态库,只是点菜,菜从厨房(动态库)实现
如果把qt的环境变量给关闭了,就不能运行了。
20 gcc编译过程总结
第一步 预处理 替换.h文件 这里没有语法检查
第二步 编译 生成汇编语言
第三步 汇编 生成二进制代码
第四步 链接 对外部的库进行链接
21 交换文件说明
比如写一个文件写了一半没有保存关机了,
然后重新 vi 这个文件的时候会报下面这个错
交换文件说明:
1) vi写文件,没有保存就关闭,自动生成一个后缀为.swp交换文件,
保存了前面写的内容
大写字母R来恢复。
但是:这样恢复之后每次打开还是会提示这个,需要把这个减缓文件删除
2)先恢复,再删除
ls -a rm .xxxx.c.swp -rf
22 寄存器介绍
23 VS反汇编
vs 嵌套汇编代码(了解)
vs反汇编:
1.设置断点
2.
上面的是Windows的示例,
如果在Linux下就直接 gcc -esc -iso。。。那一大堆生成hello.s就可以查看了
不同的编译器 不同的平台还会有所差异。
24 VS的使用
用vs进行C开发时,微软认为有些操作是不安全的,比如:
解决方法1:
25 qt的使用
通过vs、qt编译代码,必须新建工程(项目),把代码加载到工程后才能编译运行。
C语言基础 (3) C语言介绍的更多相关文章
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍&代码实现
强转chart:类型 GBK
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍&代码实现
父类是Write 需要抛出异常 声明为它的父类IO异常也是可以的 不指定 默认就是utf-8格式的 两个汉字 6个字节 GBK格式 打开文件的位置用文本打开
- 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第3节 Calendar类_1_Calendar类介绍_获取对象的方式
Calendar.getInstance()返回的就是Calendar的子类对象.GregorianCalendar 说明Calendar类重写了toSting的方法 时区亚洲的上海
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_2_集合框架介绍
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_4_Iterator接口介绍
collection集合中是没有索引的,不能使用普通的循环来便利它. 也是在util的包中 先判断集合中有没有元素 有元素就取出来,用next方法 使用接口来接受一个实现类,这就是多态
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_1_List集合_介绍&常用方法
有序的,还包含索引,允许有重复的值 . add 打印出来的不是地址,说明重写了toString的方法 remove方法 返回的是被移除的元素 set方法 get 索引越界异常 几种越界的异常
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_1_HashSet集合介绍
特点:不允许有重复的记录,无序的集合 set不允许重复.接口中没有索引.所以方法和Collection中的方法是一样的,没有带索引的方法 因为Set的方法和Collection都是一样的.所以这里不再 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_1_数据结构_栈
2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类 的.好用吗?好用,这就是数据结构的用处,只不过你在不知不 ...
- Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)
初始 Java 语言 Java SE -- Java Platform, Standard Edition 是 Java 平台的基础 Java SE 以前称为 J2SE, 可以编写桌面应用和基于 we ...
随机推荐
- 苹果操作系统名称演变史 新名称macOS
历史回顾 发布年代 名称 序号 1994-1999 Classic Mac OS 1-9 2001-2011 Mac OS X 10.0-Lion 2012-2015 OS X Mountain Li ...
- Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...
- 路飞学城Python-Day35
08-初识SQL语句 数据库客户端操作的内容(增查改删): 1.操作数据库 操作数据库 增(本质上就是创建一个本地文件夹) create database db1 charset utf8; 查 查看 ...
- POJ 1905 Expanding Rods( 二分搜索 )
题意:一个钢棍在两面墙之间,它受热会膨胀成一个圆弧形物体,这个物体长 S = ( 1 + n * C ) * L,现在给出原长 L ,温度改变量 n ,和热膨胀系数 C,求膨胀后先后中点的高度差. 思 ...
- HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )
链接:传送门 思路:判断每支箭是否在多边形内,计算几何点定位中水题,不清楚下面的代码能不能适用于给定点的顺序不确定( 既不是顺时针又不是逆时针 ) /************************* ...
- CF1042F Leaf Sets (贪心+树上构造)
题目大意:给你一棵树,让你对叶节点分组,保证每组中,任意两个叶节点之间的距离不大于K,求最小的组数 手动yy的贪心竟然对的 对于每个节点,维护一个$ma[i]$,表示在$i$节点的子树内 未被分组的叶 ...
- [学习笔记] CS131 Computer Vision: Foundations and Applications:Lecture 4 像素和滤波器
Background reading: Forsyth and Ponce, Computer Vision Chapter 7 Image sampling and quantization Typ ...
- cron 和anacron 、日志转储的周期任务
一.cron是开机自动启动的 [root@localhost ~]# chkconfig --list | grep "cron" crond 0:off 1:off 2:on 3 ...
- php 中引入邮箱服务 , 利用第三方的smtp邮件服务
项目中用短信通知有时间限制,对一些频率比较大的信息力不从心. 使用邮箱发送信息是个不错的选择\(^o^)/! 首先要注册一个邮箱,在邮箱设置里开通smtp功能. 简单介绍下smtp,大概就是第三方客户 ...
- MyBatis初始化
1. 准备工作 为了看清楚MyBatis的整个初始化过程,先创建一个简单的Java项目,目录结构如下图所示: 1.1 Product 产品实体类 public class Product { priv ...