1b8c语言,C语言 - 王朝网络 - wangchao.net.cn

C语言

來源:互聯網  2016-08-27 06:33:09  評論

Ios操作界面操作快捷键command + c 复制

command+v 粘贴

command +a 全选

command +s 保存

command +z 撤销

command +x 剪切

command +space 输入法的切换

command +

option键(ios)--alt(windows)键

command在Windows键盘中就是windows键

linux命令cdcd:change directory 切换目录

liuzw@Ubuntu:~/sunjie$ cd c

liuzw@ubuntu:~/sunjie/c$

cd ~ 或者直接输入cd,是切换到当前用户的主目录

liuzw@ubuntu:~/sunjie/c$ cd

liuzw@ubuntu:~$

cd - 撤销上一次的cd操作

liuzw@ubuntu:~/sunjie$ cd c

liuzw@ubuntu:~/sunjie/c$ cd

liuzw@ubuntu:~$ cd -

/home/liuzw/sunjie/c

liuzw@ubuntu:~/sunjie/c$

cd / 回到根目录

cd .. 回到父目录

liuzw@ubuntu:~/sunjie/c$ cd ..

liuzw@ubuntu:~/sunjie$

pwd:PRint workdirectory查看当前工作路径

liuzw@ubuntu:~/sunjie$pwd/home/liuzw/sunjie

ls: list source 查看当前工作路径下的资源,包括文件及目录

ls –a(all) 查看所有资源,包括隐藏的

ls –l(list one file per line)

红色圈住的第一列表示资源类型,其中的d表示目录,-表示文件

红色圈住的第二列表示占用磁盘空间大小

mkdir : make directory 创建目录

mkdir –p 当父目录不存在时,就创建父目录,而不是报错

touch 一般用来创建空文件echo 回显数据 输出变量

$? 表示上一次命令的执行结果,0表示执行正确,其他的表示错误,如上图示

cp :copy拷贝文件

拷贝目录

cat 显示文件内容,只能看文件,不能看目录

cat –n 显示时加行号

C语言 计算机只认识1和0,编程语言的层级如下:

机器语言

汇编语言

高级语言(c语言)

1001,0010,0010,1111

mov 2 f

while if int

C语言的编译过程编译:实质就是翻译。常用的编译器如:gcc

可执行文件是运行时环境和一些.o结尾的文件的集合。将我自己目标文件和这些文件链接以后,形成可执行的文件。

目标文件是二进制机器码文件,可执行文件也是二进制的机器码文件,但是目标文件不能在机器上运行,必须与运行环境等链接才可运行。而可执行文件可以在机器上运行。

编写我的第一个c程序,hello.c他hello.h

hello.h文件内容如下:

#defineHELLO "helloworld"

Hello.c文件内容如下

#include #include"hello.h"intmain(void)

{

printf(HELLO);return0;

}

整个编译阶段分为四步:

第一步:预处理,hello.c转变为hello.i,一般为隐式执行

预处理命令:gcc -E hello.c -o hello.i,生成预处理文件简略如下:

extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

# 943 "/usr/include/stdio.h" 3 4

# 2 "hello.c" 2

# 1 "hello.h" 1

# 3 "hello.c" 2

int main(void)

{

printf("helloworld");

return 0;

}

在预处理阶段,宏HELLO被替换为实际内容

第二步:汇编阶段,将C语言文件转换为汇编语言文件,也就是hello.i转变为hello.s

命令:gcc -S hello.i -o hello.s

hello.s文件内容如下

.file"hello.c".section .rodata

.LC0:.string"helloworld".text

.globl main

.type main, @functionmain:.LFB0:.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset16.cfi_offset6, -16movq %rsp, %rbp

.cfi_def_cfa_register6movl $.LC0, %edi

movl $0, %eaxcallprintf

movl $0, %eax

popq %rbp

.cfi_def_cfa7,8ret.cfi_endproc

.LFE0:.size main, .-main

.ident"GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4".section .note.GNU-stack,"",@progbits

第三步:将汇编语言编译成对应的机器语言(二进制格式),也就是hello.s转换为hello.o

命令:

gcc-c hello.s -o hello.o

使用命令

objdump -d hello.o

反汇编hello.o文件内容如下:

hello.o: file format elf64-x86-64

Disassembly of section .text:

0000000000000000 :

0: 55 push %rbp

1: 48 89 e5 mov %rsp,%rbp

4: bf 00 00 00 00 mov $0x0,%edi

9: b8 00 00 00 00 mov $0x0,%eax

e: e8 00 00 00 00 callq 13

13: b8 00 00 00 00 mov $0x0,%eax

18: 5d pop %rbp

19: c3 retq

第四步:将hello.o文件与运行环境链接,形成可执行文件

命令:

gcchello.o -o hello

查看hello文件内容,命令objdump –d hello反汇编查看

000000000040052d :

40052d: 55 push %rbp

40052e: 48 89 e5 mov %rsp,%rbp

400531: bf d4 05 40 00 mov $0x4005d4,%edi

400536: b8 00 00 00 00 mov $0x0,%eax

40053b: e8 d0 fe ff ff callq 400410

400540: b8 00 00 00 00 mov $0x0,%eax

400545: 5d pop %rbp

400546: c3 retq

400547: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)

40054e: 00 00

以上为链接后的main函数,注意与未链接的区别:

0000000000000000 :

0: 55 push %rbp

1: 48 89 e5 mov %rsp,%rbp

4: bf 00 00 00 00 mov $0x0,%edi

9: b8 00 00 00 00 mov $0x0,%eax

e: e8 00 00 00 00 callq 13

13: b8 00 00 00 00 mov $0x0,%eax

18: 5d pop %rbp

19: c3 retq

执行文件,命令./hello

如果把hello.c程序中的return 0 去掉的话,返回值就不一定为0

liuzw@ubuntu:~/sunjie/c$ ./a.out

helloworldliuzw@ubuntu:~/sunjie/c$ echo $?

10

总结:以上所有具体的编译过程可直接执行如下命令,直接形成可执行文件a.out

,也可加-o hello

Ios操作界面操作快捷键command + c 复制

command+v 粘贴

command +a 全选

command +s 保存

command +z 撤销

command +x 剪切

command +space 输入法的切换

command +

option键(ios)--alt(windows)键

command在Windows键盘中就是windows键

linux命令cdcd:change directory 切换目录

liuzw@Ubuntu:~/sunjie$ cd c

liuzw@ubuntu:~/sunjie/c$

cd ~ 或者直接输入cd,是切换到当前用户的主目录

liuzw@ubuntu:~/sunjie/c$ cd

liuzw@ubuntu:~$

cd - 撤销上一次的cd操作

liuzw@ubuntu:~/sunjie$ cd c

liuzw@ubuntu:~/sunjie/c$ cd

liuzw@ubuntu:~$ cd -

/home/liuzw/sunjie/c

liuzw@ubuntu:~/sunjie/c$

cd / 回到根目录

cd .. 回到父目录

liuzw@ubuntu:~/sunjie/c$ cd ..

liuzw@ubuntu:~/sunjie$

pwd:PRint workdirectory查看当前工作路径

liuzw@ubuntu:~/sunjie$pwd/home/liuzw/sunjie

ls: list source 查看当前工作路径下的资源,包括文件及目录

ls –a(all) 查看所有资源,包括隐藏的

ls –l(list one file per line)

红色圈住的第一列表示资源类型,其中的d表示目录,-表示文件

红色圈住的第二列表示占用磁盘空间大小

mkdir : make directory 创建目录

mkdir –p 当父目录不存在时,就创建父目录,而不是报错

touch 一般用来创建空文件echo 回显数据 输出变量

$? 表示上一次命令的执行结果,0表示执行正确,其他的表示错误,如上图示

cp :copy拷贝文件

拷贝目录

cat 显示文件内容,只能看文件,不能看目录

cat –n 显示时加行号

C语言 计算机只认识1和0,编程语言的层级如下:

机器语言

汇编语言

高级语言(c语言)

1001,0010,0010,1111

mov 2 f

while if int

C语言的编译过程编译:实质就是翻译。常用的编译器如:gcc

可执行文件是运行时环境和一些.o结尾的文件的集合。将我自己目标文件和这些文件链接以后,形成可执行的文件。

目标文件是二进制机器码文件,可执行文件也是二进制的机器码文件,但是目标文件不能在机器上运行,必须与运行环境等链接才可运行。而可执行文件可以在机器上运行。

编写我的第一个c程序,hello.c他hello.h

hello.h文件内容如下:

#defineHELLO "helloworld"

Hello.c文件内容如下

#include #include"hello.h"intmain(void)

{

printf(HELLO);return0;

}

整个编译阶段分为四步:

第一步:预处理,hello.c转变为hello.i,一般为隐式执行

预处理命令:gcc -E hello.c -o hello.i,生成预处理文件简略如下:

extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

# 943 "/usr/include/stdio.h" 3 4

# 2 "hello.c" 2

# 1 "hello.h" 1

# 3 "hello.c" 2

int main(void)

{

printf("helloworld");

return 0;

}

在预处理阶段,宏HELLO被替换为实际内容

第二步:汇编阶段,将C语言文件转换为汇编语言文件,也就是hello.i转变为hello.s

命令:gcc -S hello.i -o hello.s

hello.s文件内容如下

.file"hello.c".section .rodata

.LC0:.string"helloworld".text

.globl main

.type main, @functionmain:.LFB0:.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset16.cfi_offset6, -16movq %rsp, %rbp

.cfi_def_cfa_register6movl $.LC0, %edi

movl $0, %eaxcallprintf

movl $0, %eax

popq %rbp

.cfi_def_cfa7,8ret.cfi_endproc

.LFE0:.size main, .-main

.ident"GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4".section .note.GNU-stack,"",@progbits

第三步:将汇编语言编译成对应的机器语言(二进制格式),也就是hello.s转换为hello.o

命令:

gcc-c hello.s -o hello.o

使用命令

objdump -d hello.o

反汇编hello.o文件内容如下:

hello.o: file format elf64-x86-64

Disassembly of section .text:

0000000000000000 :

0: 55 push %rbp

1: 48 89 e5 mov %rsp,%rbp

4: bf 00 00 00 00 mov $0x0,%edi

9: b8 00 00 00 00 mov $0x0,%eax

e: e8 00 00 00 00 callq 13

13: b8 00 00 00 00 mov $0x0,%eax

18: 5d pop %rbp

19: c3 retq

第四步:将hello.o文件与运行环境链接,形成可执行文件

命令:

gcchello.o -o hello

查看hello文件内容,命令objdump –d hello反汇编查看

000000000040052d :

40052d: 55 push %rbp

40052e: 48 89 e5 mov %rsp,%rbp

400531: bf d4 05 40 00 mov $0x4005d4,%edi

400536: b8 00 00 00 00 mov $0x0,%eax

40053b: e8 d0 fe ff ff callq 400410

400540: b8 00 00 00 00 mov $0x0,%eax

400545: 5d pop %rbp

400546: c3 retq

400547: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)

40054e: 00 00

以上为链接后的main函数,注意与未链接的区别:

0000000000000000 :

0: 55 push %rbp

1: 48 89 e5 mov %rsp,%rbp

4: bf 00 00 00 00 mov $0x0,%edi

9: b8 00 00 00 00 mov $0x0,%eax

e: e8 00 00 00 00 callq 13

13: b8 00 00 00 00 mov $0x0,%eax

18: 5d pop %rbp

19: c3 retq

执行文件,命令./hello

如果把hello.c程序中的return 0 去掉的话,返回值就不一定为0

liuzw@ubuntu:~/sunjie/c$ ./a.out

helloworldliuzw@ubuntu:~/sunjie/c$ echo $?

10

总结:以上所有具体的编译过程可直接执行如下命令,直接形成可执行文件a.out

,也可加-o hello

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值