前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言基础01--初见C语言

C语言基础01--初见C语言

作者头像
Ms08067安全实验室
发布2020-05-24 14:57:23
10.1K0
发布2020-05-24 14:57:23
举报

C语言基础--初见C语言

常见函数:

默认情况下,main函数是C语言的起点

printf()函数是格式化输出函数 (来自stdio.h)

单行注释:/ 单行内容 /

多行注释:/* 多行内容 */

使用VS2015创建项目:

1. 新建项目

2. 依次选择vc++ ,win32 ,win32控制台程序

3.随便写个项目名称

4. 应用程序向导里选择空项目,其他默认

5. 从源文件添加新建项,创建.c文件

第一个程序:

代码语言:javascript
复制
#include<stdio.h>

int main() {
    printf("hello world!\n");
    return 0;
}

程序分析

vs2015反汇编代码如下

代码语言:javascript
复制
#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
代码语言:javascript
复制
;这里是直接把字符串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语言数据类型:

代码语言:javascript
复制
#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);

实例:输入输出字符串

代码语言:javascript
复制
#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语言运算符:

算数运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

其他运算符

运算符优先级

代码语言:javascript
复制
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
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com