说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

第一个C语言程序

Visual Studio新建项目


源文件—添加—新建项


通过Visual Studio运行

通过gcc编译后运行

C语言编译过程

C语言编译步骤

1)预处理

宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法

2)编译

检查语法,将预处理后文件编译生成汇编文件

3)汇编

将汇编文件生成目标文件(二进制文件.o)

4)链接

设置运行环境,堆栈等,链接其他库;C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

gcc编译步骤

1) 分步编译

预处理: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
选项 含义
-o file 指定生成的输出文件名为file
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
文件后缀 含义
.c C 语言文件
.i 预处理后的 C 语言文件
.s 编译后的汇编文件
.o 编译后的目标文件
预处理分析

带#的语句就是预处理指令,预处理指令在预处理的时候处理了
头文件展开: #include <stdio.h> 包含文件stdio.h(预处理时将stdio.h 文件拷贝至预处理文件中)

删除注释: 注释有两种方法: // /* */
宏替换: #define 代表是声明一个宏, 在预处理时会将宏给替代
预处理时 不会检查语法错误

条件编译: 条件不成立: #if 0 -> #endif 条件成立 #if 1 -> #endif

编译分析

将预处理文件编译生成汇编文件

会检查语法错误

汇编分析

将汇编文件编译生成二进制文件.o

链接分析

设置运行环境,堆栈等,链接其他库

2) 一步编译

gcc hello.c -o hello(还是经过:预处理、编译、汇编、链接的过程):

C语言代码分析

1) include头文件包含

  • #include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件
  • 使用C语言库函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件
  • 可以通过man 3 printf查看printf所需的头文件

2) main函数

  • 一个完整的C语言程序,是由一个、且只能有一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。
  • main函数是C语言程序的入口,程序是从main函数开始执行。

3) {} 括号,程序体和代码块

  • {}叫代码块,一个代码块内部可以有一条或者多条语句
  • C语言每句可执行代码都是";"分号结尾
  • 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
  • 所有的可执行语句必须是在代码块里面

4) 注释

  • //叫行注释,注释的内容编译器是忽略的,注释主要的作用是在代码中加一些说明和解释,这样有利于代码的阅读
  • /**/叫块注释
  • 块注释是C语言标准的注释方法
  • 行注释是从C++语言借鉴过来的

5) printf函数

  • printf是C语言库函数,功能是向标准输出设备输出一个字符串
  • printf(“hello world\n”);//\n的意思是回车换行

6) return语句

  • return代表函数执行完毕,返回return代表函数的终止
  • 如果main定义的时候前面是int,那么return后面就需要写一个整数;如果main定义的时候前面是void,那么return后面什么也不需要写
  • 在main函数中return 0代表程序执行成功,return -1代表程序执行失败
  • int main()和void main()在C语言中是一样的,但C++只接受int main这种定义方式

system库函数

作用: 在程序中启动另一个程序
参数:要的是待启动程序的路径名

寄存器、缓存、cpu、内存之间的关系

cpu > 寄存器 > 缓存 > 内存

汇编语言

VS中C语言嵌套汇编代码

VS反汇编

将重新定义main方法中的代码块,取消汇编代码

1)设置断点F9

2)F5调试

3)选择反汇编按钮

4)根据汇编代码分析程序

VS查看变量内存地址

打开调试下的内存窗口


打开调试下的监视窗口


查看a变量的内存地址,在监视窗口输入&a回车,然后在内存中搜索即可

VS关闭警告

//解决方法
#define _CRT_SECURE_NO_WARNINGS     //这个宏定义最好要放到.c文件的第一行
#pragma warning(disable:4996)   //或者使用这个

C语言学习之路(工具篇)—— Visual Studio的使用相关推荐

  1. 2017c语言自学贴吧,【图片】17年1.9开启我的C语言学习之路—小白篇【c语言吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 什么是程序呐? 我们说这个程序与你的生活有关,通常是达到某个目标或解决某个问题中所需要的步骤或过程,这一系列的步骤就是程序. 生活中的程序与计算机中的程序 ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  3. 大数据学习之路 JUC篇

    大数据学习之路 JUC篇(1) 前提说明 本人是一名学生,茫茫it行业的一名卑微的小白,这是我第一次写博客.其原因是学着学着知识发现回顾的时候差不多全忘记了!!为了总结.复习自己以往学到过的有关大数据 ...

  4. Android学习路线_工具篇(一)简单的编辑器

    工欲善其事,必先利其器.工具,是人类进化的一大助力,善于制造与使用工具,可以加快我们学习的速度.工具在人类的进化之路上随着人类共同进化,原始的人类需要的是原始的工具,先进的工具对于原始人来说也许是个占 ...

  5. Go语言学习之路(二)

    Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...

  6. C语言学习历程--小项目篇(1)

    C语言学习历程–小项目篇–基于winpcap的UDP数据发送 开发环境介绍 1.操作系统:windows10(基于x64处理器).IDE:vs 2019(微软官网个人免费版).winpcap安装包及开 ...

  7. JAVA学习之路--基础篇三

    目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...

  8. C语言-学习之路-01

    C语言学习之路-01 目录 关键字 数据类型 常量 变量 声明和定义 进制 sizeof关键字 整型:int short.int.long.long long 字符型:char ASCII对照表 转义 ...

  9. 使用SQL Server数据工具和Visual Studio Online进行连续部署

    In the previous posts 在以前的帖子中 Deployment to several databases using SQL Server Data Tools and TFS us ...

  10. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )

    文章目录 一.Visual Studio 中安装 " 使用 C++ 的移动开发 " 开发库 二.Visual Studio 中安装的 Android SDK 和 NDK 位置 三. ...

最新文章

  1. 0.2 控制系统的状态空间表示法
  2. SQL语句:SQLwhile(0=0)与while @@fetch_status=0.
  3. 参加 CSDN 2009 英雄大会有感(一)
  4. 上海师范大学计算机作业网址,新SQL——SERVER实验练习答案.doc
  5. Cloud一分钟 | 一脚踏入云计算2.0时代,京东云这回拼的是“朋友 圈”;8400万元私有云招标...
  6. 前端基础-html-表格的结构标签(了解)
  7. cydia源_Cydia错误提示解决大全
  8. iOS in-app purchase详解
  9. 简单的Swagger生产环境中屏蔽
  10. matlab 图像处理之直线拟合
  11. dynamips之入门篇(dynamipsGUI小凡模拟器)
  12. 如何在html中使用 es6语法让浏览器识别
  13. 个人向常用的一些函数的汇总成一个简易模板
  14. 【百度地图】百度地图完全模仿链家找房,三级下钻联动聚合,画圈找房!
  15. 为什么我的iPhone上的某些iMessages绿色和某些蓝色?
  16. 4234最小差值生成树
  17. (int*)、(int *)和(int **)的区别
  18. 代码覆盖率在性能优化上的一种可行应用
  19. 图文识别Readiris Pro 17
  20. 2023注册会计电子版教材

热门文章

  1. mysql随机密码没有生成
  2. repo sync fatal: 出错的补丁
  3. Java项目——画图软件
  4. win7 刷新计算机评分 蓝屏,Win7蓝屏怎么办?学懂这些蓝屏代码,告别系统蓝屏问题...
  5. matlab不少项一阶差分,MATLAB在有限差分法中的应用
  6. Numeral介绍 - 格式化和操作数字的 JavaScript 库
  7. Ajax使用的五步法
  8. google play music不显名字
  9. 计算机控制整体液压提升滑移技术采用了,钢结构滑移施工技术
  10. 生成补丁 与 打补丁 diff patch