C语言基础--初见C语言
一
常见函数:
默认情况下,main函数是C语言的起点
printf()函数是格式化输出函数 (来自stdio.h)
单行注释:/ 单行内容 /
多行注释:/* 多行内容 */
二
使用VS2015创建项目:
1. 新建项目
2. 依次选择vc++ ,win32 ,win32控制台程序
3.随便写个项目名称
4. 应用程序向导里选择空项目,其他默认
5. 从源文件添加新建项,创建.c文件
三
第一个程序:
#include<stdio.h>
int main() {
printf("hello world!\n");
return 0;
}
程序分析
vs2015反汇编代码如下
#include<stdio.h>
int main() {
;前面这块用于保障程序稳定性,把栈抬高,然后可以随便弄,弄完再把栈还原,再把寄存器的值还原;将ebp存起来,然后把栈抬高0C0H位
00C41760 push ebp
00C41761 mov ebp,esp
00C41763 sub esp,0C0h
;把ebx,esi,edi入栈
00C41769 push ebx
00C4176A push esi
00C4176B push edi
;把栈抬高的位置放到edi,然后从edi刷CCCCCCCCh
00C4176C lea edi,[ebp-0C0h]
00C41772 mov ecx,30h
00C41777 mov eax,0CCCCCCCCh
00C4177C rep stos dword ptr es:[ed
;这里是直接把字符串push进去,然后调用printf,然后平栈
printf("hello world!\n");
00C4177E push offset string "hello world!\n" (0C46BD0h)
00C41783 call _printf (0C41316h)
00C41788 add esp,4
return 0;
;等价于eax清零,比mov eax ,0效率高
00C4178B xor eax,eax
}
;把edi,esi,ebx取出来
00C4178D pop edi
00C4178E pop esi
00C4178F pop ebx
;把栈放回去
00C41790 add esp,0C0h
;比较一下栈是否还在原来的位置
00C41796 cmp ebp,esp
00C41798 call __RTC_CheckEsp (0C4110Eh)
;还原esp和ebp
00C4179D mov esp,ebp
00C4179F pop ebp
;函数执行结束
00C417A0 ret
先把栈抬高,清空,用完再还原,可以实现不影响以前的栈
四
C语言关键字:
五
C语言保留标识符:
1. 下划线开始的标识符
2. 标准库函数名
六
C语言数据类型:
#include<stdio.h>
#include<stdbool.h>
//C99之前没有布尔类型,要用需要通过typedef的方式自己构造 int main(){
//int家族
short num0; //2字节
int num1; //4字节
long num2; //8字节,大部分情况下 long = int 都是4字节 long long num3;
unsigned short num4; // 无符号短整型
unsigned int num5;
unsigned long num6;
//字符
char ctmp = 'A'; //此处需要用单引号,双引号是字符串
//浮点型,存小数,也支持科学技术法
float f1;//32位
double f2;//64位
long double f3;//128位
//bool
bool ff = true;//1
bool ft = false;//0
//指针
char * pch;
//union联合体
//struct结构体
//enum枚举
return 0;
}
七
C语言输入输出函数:
输入函数:scanf("%?",temp);
输出函数:printf("%?",temp);
实例:输入输出字符串
#include<stdio.h>
int main() {
int len = 0;
char str1[20];
scanf("%s", str1);
len = strlen(str1);
printf("hello world:%s,long:%d",str1,len);
return 0;
}
默认情况下scanf被禁用了,因为存在安全问题,需要包含一个宏才能用:
1. 项目--属性--C/C++--预处理器--编辑
2. 把报错里说的宏复制进去
八
C语言命名规则:
由字母,数字,下划线组成
只能以字符和下划线开头,不能用数字开头
匈牙利命名法:变量名前+属性+类型
下划线划分
大驼峰命名:所有单词首字母大写
小驼峰命名:第一个单词首字母小写,其他首字母大写
九
C语言运算符:
算数运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
运算符优先级
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E 7%BA%A7/4752611#3
本文分享自 Ms08067安全实验室 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!