【C】Re01
一、GCC分步编译
xxx.c文件经历的一系列编译过程:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
/*
* gcc
*
* GCC的分布编译
* xxx.c文件 -> xxx.exe可执行文件
* 1、预处理 ------------------------------------------------------
* - hello.c文件 生成hello.i文件,需要指令 -E
* - hello.i 也是一个c程序
* - 预处理阶段展开头文件,宏替换,条件编译,取消注释
*
* 命令
* gcc 文件名 -E
* gcc 文件名.c -E -o 文件名.i
*
* 导入的头文件在预编译中展开,文件大小变化
*
* 2、编译 ------------------------------------------------------
* - xxx.i 文件 编译生成 xxx.s 文件 指令 -S
* - xxx.s 文件是一个汇编文件,
* - 编译阶段主要是语法的检测
* - gcc 文件名.i -S -o 文件名.s
* 3、汇编 ------------------------------------------------------
* - xxx.s 汇编文件 生成 hello.o 文件需要指令 -c
* - xxx.o 是一个二进制文件
* - 汇编阶段主要是生成让机器识别的二进制文件
*
* 4、链接 ------------------------------------------------------
* - 将hello.o 生成 hello.exe 可执行文件
* - 可以在终端中执行此文件
* gcc 文件名.o -o 文件名.exe
*
* 指令参数
* -E -> -S -> -c
* xxx.c
* -> xxx.i 预处理后的源码文件
* -> xxx.s 编译后的汇编文件
* -> xxx.o 汇编编译后的二进制文件
* -> xxx.exe 可执行文件
*
* */
二、System函数
1、CMD终端命令:
mspaint 画图
notepad 记事本
calc 计算器
control 控制面板
wmic memphysical get maxcapacity 查看最大内存容量
2、System函数
System函数可以让C语言程序执行操作系统命令
也就是将命令以字符串的形式传入执行
该函数需要包含标准库头文件 #include <stdlib.h>
#include <stdio.h>
#include <stdlib.h> int main() {
/*printf("Hello, World!\n");*/
system("gcc -v");
return 0;
}
3、Pause暂停命令
system("pause");
可用于暂停程序,防止程序运行过快窗口结束
三、自定义函数与调用
#include <stdio.h>
#include <stdlib.h> void myFunction() {
printf("my custom function \n我的自定义函数 \n");
} int main() {
myFunction();
return 0;
}
四、C4996错误问题
#include <stdio.h>
#include <stdlib.h> void myFunction() {
printf("my custom function \n我的自定义函数 \n");
} void errorC4996() {
char buf[1024] = {0};
sprintf(buf, "%s", "aaa");
printf("%s", buf);
system("pause");
} int main() {
errorC4996();
return 0;
}
老版本的函数存在内存安全隐患
解决方案1:使用加上后缀了_s的安全化的函数进行替代
#include <stdio.h>
#include <stdlib.h>
//#define _CRT_SECURE_NO_WARNINGS void myFunction() {
printf("my custom function \n我的自定义函数 \n");
} void errorC4996() {
char buf[1024] = {0};
sprintf_s(buf, "%s", "aaa");
printf_s("%s", buf);
system("pause");
} int main() {
errorC4996();
return 0;
}
解决方案2:或者是包含一个宏
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
void myFunction() {
printf("my custom function \n我的自定义函数 \n");
} void errorC4996() {
char buf[1024] = {0};
sprintf(buf, "%s", "aaa");
printf("%s", buf);
system("pause");
} int main() {
errorC4996();
return 0;
}
解决方式3:使用禁用警告
#include <stdio.h>
#include <stdlib.h>
//#define _CRT_SECURE_NO_WARNINGS
#pragma warnings(disable:4996) void myFunction() {
printf("my custom function \n我的自定义函数 \n");
} void errorC4996() {
char buf[1024] = {0};
sprintf(buf, "%s", "aaa");
printf("%s", buf);
system("pause");
} int main() {
errorC4996();
return 0;
}
【C】Re01的更多相关文章
- 【Spring-Security】Re01 入门上手
一.所需的组件 SpringBoot项目需要的POM依赖: <dependency> <groupId>org.springframework.boot</groupId ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
随机推荐
- log4net info 方法 根据不同业务创建不同的文件名
log4net info 方法 根据不同业务创建不同的文件名 <configuration> <!-- ... 其他配置 ... --> <configSections& ...
- web框架及Django简介
WEB框架 Web框架是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. web框架已经实现了很多功能 ...
- readonly和disable的区别是什么?
Readonly和Disabled两种属性的写法如下: 1.<input type="text" name="name" value="xxx& ...
- EthernetIP IO从站设备数据 转opc ua项目案例
1 案例说明 设置网关采集EthernetIP IO设备数据 把采集的数据转成opc ua协议转发给其他系统. 2 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一种协议转换成另外一种协议 ...
- ABP框架开发实例教程-生成框架代码
ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称.ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB ...
- QT自定义右键菜单
利用QMenu和QAction可以实现非常实用的右键菜单功能.具体实现思路如下: 1.在xxx.h文件中添加如下头文件 #include <QMenu> #include <QCon ...
- React Context 的使用
使用React开发应用程序时,如果多个组件需要共享数据,可以把数据放到父组件中,通过属性向下传递给子组件.但当组件嵌套较深时,两个最底层的组件要想共享数据,那就霜要把数据放到最顶层的组件中,然后再一层 ...
- 解密Prompt系列33. LLM之图表理解任务-多模态篇
上一章我们介绍了纯文本模态的表格理解任务,这一章我们聚焦多模态图表数据.先讨论下单纯使用prompt的情况下,图片和文字模态哪种表格模型理解的效果更好更好,再说下和表格相关的图表理解任务的微调方案. ...
- JavaScript --函数--手稿
- 如何把自己项目中的jar包部署或pom部署到私服Nexus【实践可行版】
如何把自己项目中的jar包部署到私服 1.在项目的pom.xml文件中加入私服地址: <distributionManagement> <snapshotRepository> ...