一、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的更多相关文章

  1. 【Spring-Security】Re01 入门上手

    一.所需的组件 SpringBoot项目需要的POM依赖: <dependency> <groupId>org.springframework.boot</groupId ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  10. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

随机推荐

  1. 2D 3D 景深 动画 阴影

    2D 二维的平面空间,让元素在X轴或者Y轴进行变化 2D里面的功能函数 2D-位移 2D-旋转 2D-缩放 2D-倾斜 变形属性 transform:: 位移:transform:translate( ...

  2. 3. Elasticsearch 索引基本操作

    引言 上一篇教大家安装了Elasticsearch-head插件和kibana可视化分析工具,今天就教大家在kibana的dev-tool里的控制台中如何操作索引 基础概念 索引(index) 索引( ...

  3. 如何解决Win10删除文件慢的办法

    问题:最近使用KMS激活了一些工具,今天删除不需要的文件时发现删除文件很慢很慢,删除一个几百k的文件都很慢. 解决办法通过控制面板→管理工具→服务→找到该进程并设为禁用就OK了.

  4. HttpServletRequest获取header参数 sign

    HttpServletRequest获取header参数 sign //从请求头中获取参数 private static Map<String, String> getHeaders(Ht ...

  5. AgileConfig-1.9.4 发布,支持 OpenTelemetry

    Hello 大家好,最新版的 AgileConfig 1.9.4 发布了.现在它可以通过 OpenTelemetry 对外提供 logs,traces,metrics 三个维度的数据.用户可以自由选择 ...

  6. recastnavigation.Sample_TempObstacles代码注解 - rcBuildHeightfieldLayers

    烘培代码在 rcBuildHeightfieldLayers 本质上是为每个tile生成高度上的不同layer 算法的关键是三层循环: for z 轴循环 for x 轴循环 for 高度span 循 ...

  7. 【VMware vSphere】使用RVTools中的PowerShell脚本创建导出vSphere环境信息的自动化任务。

    RVTools 是 VMware 生态系统中一个非常受欢迎且免费的 Windows 实用工具,用于收集并显示 VMware vSphere 环境中的相关信息,如虚拟机.主机及集群等相关配置.RVToo ...

  8. .NET 个人博客-首页排版优化

    个人博客-首页排版优化 优化计划 置顶3个且可滚动或切换 推荐改为4个,然后新增历史文章,将推荐的加载更多放入历史文章,按文章发布时间降序排列. 标签功能,可以为文章贴上标签 推荐点赞功能 本篇文章优 ...

  9. Freertos学习:02-FreeRTOSConfig.h

    --- title: rtos-freertos-02-FreeRTOSConfig.h EntryName: rtos-freertos-02-FreeRTOSConfig date: 2020-0 ...

  10. Codeforces Round 941 (Div. 2) cf 941 div2 A~D

    每题都有AC代码在伸缩代码框请留意!! A. Card Exchange -------------------------------------------题解------------------ ...