一、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. Java中的包(Package)

    # 包(Package) **为方便管理类(按照不同的功能管理类),解决同名问题的发生** - 使用`package关键字`修饰包 - **类名(全类名)=包名(地址)+类名简称** ```java ...

  2. 记一次 .NET某工控视觉自动化系统 卡死分析

    一:背景 1. 讲故事 今天分享的dump是训练营里一位学员的,从一个啥也不会到现在分析的有模有样,真的是看他成长起来的,调试技术学会了就是真真实实自己的,话不多说,上windbg说话. 二:WinD ...

  3. 在js、vue中使用方法调用a标签

    <el-button type="primary" style="width:130px" @click="shout"> &l ...

  4. Java中的Collection集合(单列集合)

    1.集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合与数组的区别: (1)数组的长度是固定的,集合的长度是可变的. (2)数组中存储的是同一类型的元素,可以存储基本数据类型 ...

  5. 一些常见功能的查询sql

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 一些常见功能的查询sql 日期:2019-4-10 阿珏 ...

  6. 03-Python数据类型

    None类型 Python3中没有NULL,取而代之的是空类型None.空列表.空字典等. None是一个特殊的Python对象,表示无. None的类型是NoneType. 如果只想声明变量,而不想 ...

  7. 解读MySQL 8.0数据字典的初始化与启动

    本文分享自华为云社区<MySQL全文索引源码剖析之Insert语句执行过程>,作者:GaussDB 数据库. 本文主要介绍MySQL 8.0数据字典的基本概念和数据字典的初始化与启动加载的 ...

  8. CLR via C# 笔记 -- 字符、字符串、文本处理(14)

    1. 字符串一经创建,便不能以任何方式修改,只能修改引用. 2. ToLowerInvariant() 和 ToUpperInvariant() 以忽略语言文化的方式将字符串转换为小写或大写形式.性能 ...

  9. 国芯新作 | 四核Cortex-A53@1.4GHz,仅168元起?含税?哇!!!

        获取更多T507全国产平台资料可在评论区留言或关注官方公众号~

  10. [UG 二次开发 python] 生成略缩图并保存

    保存到零件同名的文件夹下,名称相同,类型是 jpg 用到 numpy,PIL,cv2 blockstyler 文件略 # nx: threaded __version__ = "0.0.1& ...