C语言学习之路(工具篇)—— Visual Studio的使用
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
第一个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的使用相关推荐
- 2017c语言自学贴吧,【图片】17年1.9开启我的C语言学习之路—小白篇【c语言吧】_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 什么是程序呐? 我们说这个程序与你的生活有关,通常是达到某个目标或解决某个问题中所需要的步骤或过程,这一系列的步骤就是程序. 生活中的程序与计算机中的程序 ...
- 12天学好C语言——记录我的C语言学习之路(Day 12)
12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...
- 大数据学习之路 JUC篇
大数据学习之路 JUC篇(1) 前提说明 本人是一名学生,茫茫it行业的一名卑微的小白,这是我第一次写博客.其原因是学着学着知识发现回顾的时候差不多全忘记了!!为了总结.复习自己以往学到过的有关大数据 ...
- Android学习路线_工具篇(一)简单的编辑器
工欲善其事,必先利其器.工具,是人类进化的一大助力,善于制造与使用工具,可以加快我们学习的速度.工具在人类的进化之路上随着人类共同进化,原始的人类需要的是原始的工具,先进的工具对于原始人来说也许是个占 ...
- Go语言学习之路(二)
Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...
- C语言学习历程--小项目篇(1)
C语言学习历程–小项目篇–基于winpcap的UDP数据发送 开发环境介绍 1.操作系统:windows10(基于x64处理器).IDE:vs 2019(微软官网个人免费版).winpcap安装包及开 ...
- JAVA学习之路--基础篇三
目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...
- C语言-学习之路-01
C语言学习之路-01 目录 关键字 数据类型 常量 变量 声明和定义 进制 sizeof关键字 整型:int short.int.long.long long 字符型:char ASCII对照表 转义 ...
- 使用SQL Server数据工具和Visual Studio Online进行连续部署
In the previous posts 在以前的帖子中 Deployment to several databases using SQL Server Data Tools and TFS us ...
- 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )
文章目录 一.Visual Studio 中安装 " 使用 C++ 的移动开发 " 开发库 二.Visual Studio 中安装的 Android SDK 和 NDK 位置 三. ...
最新文章
- 0.2 控制系统的状态空间表示法
- SQL语句:SQLwhile(0=0)与while @@fetch_status=0.
- 参加 CSDN 2009 英雄大会有感(一)
- 上海师范大学计算机作业网址,新SQL——SERVER实验练习答案.doc
- Cloud一分钟 | 一脚踏入云计算2.0时代,京东云这回拼的是“朋友 圈”;8400万元私有云招标...
- 前端基础-html-表格的结构标签(了解)
- cydia源_Cydia错误提示解决大全
- iOS in-app purchase详解
- 简单的Swagger生产环境中屏蔽
- matlab 图像处理之直线拟合
- dynamips之入门篇(dynamipsGUI小凡模拟器)
- 如何在html中使用 es6语法让浏览器识别
- 个人向常用的一些函数的汇总成一个简易模板
- 【百度地图】百度地图完全模仿链家找房,三级下钻联动聚合,画圈找房!
- 为什么我的iPhone上的某些iMessages绿色和某些蓝色?
- 4234最小差值生成树
- (int*)、(int *)和(int **)的区别
- 代码覆盖率在性能优化上的一种可行应用
- 图文识别Readiris Pro 17
- 2023注册会计电子版教材