C编程基础day03

机器语言——汇编语言——高级语言
汇编语言和硬件相关, 不同的硬件使用的指令集不同。 ARM和x86就不同。移植性差。
高级语言不依赖硬件。编译器将高级语言翻译成汇编语言,再翻译成机器语言。

linux在当前环境运行可执行文件要加./   如./a.out   
linux在绝对路径下运行加斜杠即可  如 /home/edu/c_code/a.out

c语言由函数组成, 有且只有一个main函数,程序运行先从main函数运行。main函数又系统自动调用,不需要人为调用。

windows下使用gcc需要在我的电脑环境变量中的Path添加QT目录下的bin, 使用gcc前先用gcc -v查看gcc是否存在
0、切换盘符时无需cd  直接c:
1、进入代码所在目录  (使用绝对路径时候不用去所代码在的目录)
2、dir查看目录信息
3、gcc hello.c  默认在当前生成a.exe     gcc hello.c -hello 默认在当前生成hello.exe
4、运行在windows下无需./  可直接输入a.exe或a来运行

gcc 是由GNU开发的编程语言编译器
linux编译的程序只能在linux下进行,windows编译的程序只能在windows下运行。
linux的64位和32位不兼容, windows的32位编译后可以在64位运行, 但是64位编译后不能在32位运行。


system函数
system函数的头文件位<stdlib.h>
system的作用为在执行函数过程中,调用函数外部指令。用法system("外部指令");

同样代码int b=system(“./a.out”);加入a.out return 100,在不同系统平台下system的返回值b不一样。C语言所有库函数的调用,在不同平台下只能保证语法一致的,不能保证运行结果一致,所以C语言兼容性不如想象的好。Linux和Unix发展离不开POSIX标准,但是windows支持比价差。 所以Linux和Unix相互兼容较好,但是windows和linux/unix兼容性较差。

为什么windows的中文字符和linux中文字符相互传输时候会是乱码。
Windows默认支持的中文编码gbk,gb2312,ANSI
Linux默认支持的中文编码是UTF-8
可以使用notepad将代码源文件格式建UTF-8转换为ANSI格式消除乱码

windows指令
mstsc -v UserName 远程控制计算机
calc 计算器
mspaint 画图板
notepad 记事本
可以在代码中使用system("calc");来调用计算器

Windows下的图形界面有两个QT和MFC
QT创建工程路径和名称都不可以是中文
QT在UI中选择按钮,然后在按钮中右键选择“转到槽”然后使用system函数调用外部应用,即可实现图形界面。

VS在MFC中选择按钮,然后双击进入对应代码,再添加system函数调用外部应用,即可实现图形界面。

C语言编译的4步骤
1、预处理:不检查语法, 宏定义展开,头文件展开,条件编译,同时将代码中的注释删除。
      gcc -E hello.c -o hello.i

2、编译: 检查语法,将预处理后的文件编译生成汇编文件
      gcc -S hello.i -o hello.s

3、汇编:将汇编文件生成目标代码(二进制文件)
      gcc -c hello.s -o hello.o

4、链接:C语言写的程序依赖各种库,所以生成目标代码后还需要将库链接到最终可执行的程序中去。
      gcc hello.o -o hello

ldd查看linux下可执行文件需要的动态库ldd hello
windows下可以使用Depends.exe来查看某个软件依赖的动态库,直接把软件拖到Depends.exe即可。

交换文件说明:我们通过vi写文件时候没有保存就关闭,会自动生成一个.swp的交换文件,这个交换文件会保存前边我们没有保存的内容。
对于交换文件.swp文件下输入R自动恢复,  D 删除交换文件,E直接编辑,.....
 ls-alh会发现一个隐藏文件.swp。如果确认恢复过后就可以rm -rf删除.swp文件了.

寄存器是CPU内部的基本存储单位。
运行程序时候,1、先将程序从硬盘加载到内存,2、 如果需要运算不能直接在内存中运算,如果需要运算会将内存中的数据加载到CPU中的寄存器进行运算。3、 最后将寄存器的计算结果移到内存中。 假如某些内存数据需要频繁计算即频繁和CPU寄存器交互时候,可以把这些数据放到CPU的缓存中,便于提高速度。

CPU 通过总线和外部设备交互,如果总线宽度是8位的,所以CPU的寄存器也是8位的。
64位的CPU架构运行32位的操作系统,这个操作系统仍旧是32位的。
离CPU内部最近的是寄存器,然后是缓存, 然后是内存。

VS 可以先在某一行代码设置断点,然后调试, 然后在调试的按钮下选择窗口, 再选择反汇编即可查看汇编代码。

VS中使用sacnf、strcpy、sprintf会产生C4996告警, 解决方法1:在首行添加 #define _CRT_SECURE_NO_WARINGS
解决方法2:在首行添加 #define pragma waring(disable:4996)

通过VS或QT编译代码,必须新建项目或工程才可以编译



猜你喜欢

转载自blog.csdn.net/Shayne_Lee/article/details/80870117
今日推荐