C语言——编译与链接
目录
前言
一程序的两种环境
1翻译环境
2执行环境
二预处理
1预处理符号
2#define
2.1#define 定义标识符
2.2#define 定义宏
2.2.1#和##
2.3带副作用的宏参数
2.4宏和函数的比较
2.5命名约定
3#undef
4命令行定义
5条件编译
5.1单分支
5.2多分支
5.3判断是否被定义
5.4嵌套形式
6文件包含
6.1本地文件包含
6.2库文件包含
6.3嵌套文件包含
前言
写完代码后,让代码‘跑’起来的过程,你是否有过疑问:VS是怎么把我们所写的代码变成让电脑读懂并能执行的可执行程序?学完C语言的编译与链接后,你或许就有答案了~
一程序的两种环境
写代码中,存在着两种不同的环境:
一种种是翻译环境:在这个环境中源代码被转换为可执行的机器指令;
一种种是执行环境:它用于实际执行代码
1翻译环境
在翻译环境中共分为两大步:编译与链接;
编译:组成一个程序的每个源文件通过 编译器 转换成目标代码(object code),形成目标文件;
链接:每个目标文件由 链接器 捆绑在一起,形成一个单一而完整的可执行程序;
在window环境中,目标文件是以 .obj 结尾的文件;而可执行程序以 .exe 结尾的文件
而编译本身也分为3步:预编译(预处理),编译,汇编
由于VS不好演示各个阶段生成的文件来观察现象,我们用Linux环境来演示
先准备一段代码:
#include <stdio.h>#define M 100
// 主函数入口
int main()
{int a = 10;int b = 20;printf("hehe\n");//下面是代码int c = a + b;int d = M;printf("%d", d);return 0;
}
预处理选项 gcc -E test.c -o test.i 生成的test.i文件与原文件进行对比
改变:
1将注释进行替换成空格;
2头文件的包含,#define的替换,这些都是预处理指令,都是在预处理下进行处理的
编译选项 gcc -S test.i -o test.s
把C语言代码翻译成汇编代码,包括:
1词法分析;2语法分析;3语义分析;4符号分析(全局变量/函数的分析)
汇编选项 gcc -c test.c -o test.o
汇编过程把汇编代码翻译成了二进制指令,生成了.o文件(目标文件)
(生成符号表)
在编译期间的符号分析如全局变量/函数分别对应不同的地址储存,每个文件生成自己独立的符号表
链接选项选项 gcc test.o -o test.exe
链接将目标文件和链接库生成可执行的二进制的程序,链接过程包括:
1合并段表;2符号表的合并与重定位
2执行环境
程序执行的过程:
1. 程序必须载入内存中;在有操作系统的环境中:一般这个由操作系统完成;在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
2. 程序执行,调用main函数; 3. 执行程序代码;这个时候程序将使用一个运行时堆栈(函数栈帧空间),存储函数的局部变量和返回地址;
4. 终止程序;正常终止main函数;也有可能是意外终止
二预处理
1预处理符号
__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义(VS未遵守 GCC遵守)
#include<stdio.h>int main()
{printf("%s\n",__FILE__);printf("%d\n",__LINE__);printf("%s\n",__DATE__);printf("%s\n",__TIME__);printf("%d\n",__STDC__);//说明gcc遵守return 0;
}
2#define
2.1#define 定义标识符
#define MAX 1000
#define INT int
#define forever for(;;) //用更形象的符号来替换一种实现// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf( \"file:%s line:%d\ndate:%s time:%s\n", \__FILE__,__LINE__ , \__DATE__,__TIME__ )
int main()
{DEBUG_PRINT;return 0;
}
注意:#define定义标识符时千万不要加分号(;),不然你将会见到意想不到的错误,如:
明明有加括号却报错了!就是因为#define替换把;给替换上了,造成语法错误
2.2#define 定义宏
#define 机制包括了一个规定:允许把参数替换到文本中,这种实现通常称为宏(macro)或定义
宏(define macro)
使用:
#include <stdio.h>#define Add(a, b) a + b // 没有;int main()
{int i = 10, j = 20;printf("%d\n", Add(i, j));return 0;
}
结果:
这样使用有点类似函数实现Add功能:但两者使用上有不同,如果是下面的情况:
#include <stdio.h>#define Add(a, b) a + b // 没有;int main()
{int i = 10, j = 20;printf("%d\n", 3 * Add(i, j));//预期是90return 0;
}
结果:
怎么是50??
我们将代码进行预处理来观察现象:
原来是优先级运算的问题:前面乘法先计算导致结果不是所预期的那样;
这也就是在使用#define 宏时我们要注意优先级:通常就是定义时加上括号
(参数同时也要加上括号,因为你不知道在调用宏时传的是不是表达式)
#define Add(a,b) ((a)+(b)) //没有;int main()
{int i=10,j=20;printf("%d\n",3*Add(i,j));//预期是90return 0;
}
注意:
1. 宏参数和#define 定义中可以出现其他#define定义的符号。但是对于宏,不能出现递归。
2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。
2.2.1#和##
# 作用:把一个宏参数变成对应的字符串
#include <stdio.h>int main()
{int a = 10;printf("the value of a is %d\n", a);char c = 'w';printf("the value of c is %c\n", c);float f = 3.14f;printf("the value of f is %f\n", f);return 0;
}
这种代码冗余,使用函数形式解决又不知道要传什么参数适合,所以我们用宏结合 # 进行优化
#include <stdio.h>#define Print(n, format) printf("the value of " #n " is " format "\n", n)int main()
{int a = 10;Print(a, "%d");// printf("the value of a is %d\n",a);char c = 'w';Print(c, "%c");// printf("the value of c is %c\n",c);float f = 3.14f;Print(f, "%f");// printf("the value of f is %f\n",f);return 0;
}
结果是一样的!
可以这么说:#n 的出现实现还原回去传进来时的参数名
而##的作用:则是将两个宏参数进行拼接使用(有点怪奇葩的)
#include <stdio.h>#define Splice(a, b) a##bint main()
{int value10 = 10;printf("%d\n", Splice(value, 10));return 0;
}
2.3带副作用的宏参数
什么是副作用?
x+1//x本身没改变x++//x本身被改变了,所以执行该语句有副作用
实现:比大小之后返回最大值的函数/宏
#include <stdio.h>#define Max1(a, b) ((a) > (b) ? a : b)int Max2(int a, int b)
{return a > b ? a : b;
}int main()
{int i = 10, j = 20;int m = Max1(i, j);printf("%d\n", m);m = Max2(i, j);printf("%d\n", m);return 0;
}
看似实现出来使用上没问题,但如果是以下情况:
#include <stdio.h>#define Max1(a, b) ((a) > (b) ? a : b)int Max2(int a, int b)
{return a > b ? a : b;
}int main()
{int i = 10, j = 20;int m = Max1(i++, j++);printf("%d\n", m);m = Max2(i++, j++);printf("%d\n", m);return 0;
}
表面上看上去:i++,j++后还是j最大,输入应该是21,怎么宏实现出来的是22??
将代码进行预处理后就能得到答案:原来j++了两次
所以对于需要改变参数值的实现形式:用函数更为靠谱;
但我们上面又见过一种实现方式宏能实现,而函数实现不了;那么究竟宏和函数之间各有什么优劣呢?
2.4宏和函数的比较
两者的优点与缺点都是相对应的;
宏的优点:
1.通常由于处理简单运算:执行与处理都比函数要快很多(体现在汇编中);
2. 宏是类型无关的:所以在用于比较中,传入能比较的如何变量类型都可以,而函数参数开始就被固定了(设计函数需要设计参数类型)
宏的劣势:
1.宏不方便进行调试:所以出错时进行解决通常被函数要慢很多; 2.宏与类型无关,使用时就不够严谨,较容易出现错误; 3.设计宏时一定要检查运算符优先级的问题(上面代码演示过)
宏有时候能做到函数做不到的事(上面#的例子是一个) 如要传类型进行使用时(函数就做不到传类型进行使用)
#include <stdio.h>
#include <stdlib.h>#define MALLOC(num, type) (type *)malloc(num * sizeof(type))int main()
{// 实现malloc(5,int)MALLOC(5, int);return 0;
}
2.5命名约定
一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者;
所以我们平时的一个习惯是:
宏名全部大写;
函数名不要全部大写
3#undef
用于移除一个宏定义
#include <stdio.h>#define M 100int main()
{int m = M;printf("m=%d\n", m);
#undef M
// 移除后M还能再次定义
#define M 1000int n = M;printf("n=%d\n", n);return 0;
}
4命令行定义
在gcc中:如果不把变量进行初始化,可以在使用命令行进行编译时指定它的大小
gcc -D Name=10
#include <stdio.h>int main()
{int arr[sz];for (int i = 1; i <= sz; i++){arr[i] = i;}for (int i = 1; i <= sz; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
5条件编译
如果我写了不同环境下的多份代码,即将在不同环境下进行编译,要想其它代码不干扰编译,我们可以选择使用条件编译对其它代码进行屏蔽达到目的
5.1单分支
5.2多分支
5.3判断是否被定义
5.4嵌套形式
6文件包含
6.1本地文件包含
#include "filename"
查找策略:
先在源文件所在目录下查找;
如果该头文件未找到编译器就像查找库函数头文件一样在标准位置查找头文件;
找不到就提示编译错误
6.2库文件包含
#include <filename.h>
查找头文件直接去标准路径下去查找,如果找不到就提示编译错
这样是不是可以说,对于库文件也可以使用 “” 的形式包含?
答案是肯定的,可以。
但是这样做查找的效率就低些,当然这样也不容易区分是库文件还是本地文件了
6.3嵌套文件包含
这样使用时tet,c包含两份comm.h,造成文件重复
解决:
//方法1
#ifdnef __TEST_H__ //没被定义就编译该文件的内容#define __TEST_H__//内容 #endif __TEST_H__//第二就不会编译内容里面的代码(因为__TEST_H__存在了)//方法二
#pragma once //加上这句就表示该文件只需被编译一次
以上便是全部内容,有问题欢迎在评论区指正,感谢观看!
相关文章:
C语言——编译与链接
目录 前言 一程序的两种环境 1翻译环境 2执行环境 二预处理 1预处理符号 2#define 2.1#define 定义标识符 2.2#define 定义宏 2.2.1#和## 2.3带副作用的宏参数 2.4宏和函数的比较 2.5命名约定 3#undef 4命令行定义 5条件编译 5.1单分支 5.2多分支 5.3判断是…...
NewStar CTF week1 web wp
谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id,是一个占位符,按第二列排序用来测试列数,如果没有两列则会报错-1 union select 1,2 -1同样是占位符,union的作用是将注入语句合并到原始语句…...
Android BitmapShader简洁实现马赛克,Kotlin(一)
Android BitmapShader简洁实现马赛克,Kotlin(一) 这一篇, Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3)-CSDN博客 基于PorterDuffXfermode实现马…...
NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D
在全球拥有近100家工厂的舍弗勒,从2016年开启数字化运营进程,而当前制造、库存、劳动力和物流的数字化,已无法支持其进一步简化工作流程,亟需数字化物理制造环境,打造“数字孪生”工厂。 NavVis为其提供NavVis VLX 3…...
web服务器 网站部署的架构
WEB服务器工作原理 Web web是WWW(World Wide Web)的简称,基本原理是:请求(客户端)与响应(服务器端)原理,由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成 客户端发出请求的方式:地址栏请求、超链接请求、表单请求 …...
ecovadis验厂相关要求
EcoVadis验厂的相关要求主要包括以下几个方面: 一、企业基本资质要求 合法注册与运营:企业必须是合法注册并运营的法人实体,具备合法的经营资质,如营业执照、税务登记证等。无严重违法记录:在过去三年内,…...
SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言,Python也是高级编程语言;不是框架(框架:一般用于大型复杂需求项目,用于快速开发)具有三大特性,所谓Jav…...
Spring Boot中选择性加载Bean的几种方式
说明:用过Spring框架的都知道其自动装配的特性,本文介绍几种选择性加载Bean的方式。Spring自动装配参考以下两篇文章: 基于SpringBoot的三层架构开发&统一响应结果 SpringBoot自动装配原理简单分析 ConditionalOnProperty Conditiona…...
【JVM】垃圾收集器详解
你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中,垃圾回收(GC)是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…...
【实用技能】如何在Stimulsoft产品中使用用户函数,快速创建报表及仪表盘
Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…...
MySQL四种隔离级别
MySQL的隔离级别是在事务这个大主题下面产生的说法。 那么什么是事务,事务就是一组sql语句,要么全部执行成功,要么都不执行,不能只执行成功其中的部分sql。事务的最终目的是为了保证数据库数据的完整性、一致性和可用性。 要保…...
Unity入门1
安装之后无法获得许可证,可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用,重开vstu,或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…...
qml Loader详解
1、概述 QML Loader是Qt Quick框架中的一个关键元素,它允许开发者动态地加载和卸载QML组件。这种动态加载机制对于提升应用程序的性能、响应速度和用户体验至关重要。通过Loader,应用程序可以在需要时才加载特定的组件,而不是在启动时一次性…...
《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: 《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风…...
web端ActiveMq测试工具
如何用vue3创建简单的web端ActiveMq测试工具? 1、复用vue3模板框架 创建main.js,引入APP文件,createApp创建文件,并加载element插件,然后挂载dom节点 2、配置vue.config.js脚本配置 mport { defineConfig } from "vite&qu…...
1561. 你可以获得的最大硬币数目
class Solution:def maxCoins(self, piles: List[int]) -> int:piles.sort()res,n0,len(piles)for i in range(n//3):respiles[n-2-2*i]return res这里如果"你"想要获取最大,那么从最大的开始找 每隔俩算一个最大累计,Bob默认自己从最小那找…...
NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (二)
实时通信应用 的主流技术 并非NIO , 整理本文的目的是 更好的理解 NIO 。 在现代的 即时聊天应用中,使用 WebSocket、MQTT 或 SignalR 等协议更为普遍。 若您想了解 当前主流的有关 实时通信应用 的技术 , 请移步他文。 (一) 业务场景 实…...
GD32L233RB 驱动数码管
1.数码管有8段A、B、C、D、E、F、G 和 H小数点 以及片选信号(DIG) DIG用来选择那一位,A-G 用来显示段 静态显示每次只能一次显示单个位 动态显示(动态扫描)所有的位显示结束要在10ms左右 显示2ms 消光1ms 实…...
AIGC视频生成模型:Stability AI的SVD(Stable Video Diffusion)模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Stability AI的视频生成模型SVD(Stable Video Diffusion)模型,这家公司在图像生成领域富有盛名,开发并维护了知名开源项目SD系列…...
Linux 系统错误处理简介
Linux 系统错误处理简介 1. errno:错误代码的载体2. strerror():错误信息的翻译官3. perror():便捷的错误信息输出4. 系统调用与库函数的区别5. 错误处理的最佳实践 在 C/C 程序开发中,我们经常需要处理各种错误情况 Linux 系统提…...
systemC示例
main.cpp #include <memory> using namespace std; #include "top.h" int sc_main(int i, char *av[]) { // 关闭关于 IEEE 1666 标准中过时特性的警告 sc_report_handler::set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); cout <…...
C++打字模拟
改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...
国产低功耗带LCD驱动和触摸按键功能的MCU
以下是国产低功耗、集成LCD驱动和触摸按键功能的MCU精选型号及其核心特性,结合性能、功耗和适用场景进行综合推荐: 1.灵动微MM32L0130系列 257 核心特性:低功耗:待机模式功耗低至100nA,支持多种低功耗模式。 LCD驱动&a…...
在 imx93 平台调试 nau88c10 声卡
一、环境介绍 linux 版本:6.6.52 soc:imx9331 codec:nau88c10 使用的内核文件为 Image,dtb 文件为:imx93-11x11-evk.dtb 二、硬件检查 i2s 信号线要接对 i2c 控制信号建议为 4.7k 上拉 codec 供电可以按参考设计…...
机器学习-分类算法评估标准
一. 准确率 accuracy 将预测结果和测试集的目标值比较,计算预测正确的百分比 准确率越高说明模型效果越好 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier #加载鸢尾花…...
美区TikTok解封后如何回归使用?
随着2025年初美区TikTok解封的消息引起了广泛关注,许多用户纷纷开始重新关注这一全球最受欢迎的短视频平台。在经历了数月的禁用期后,TikTok在美国市场的回归,代表了这一平台的巨大潜力和挑战。从用户的使用习惯,到平台的内容策略…...
行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%
作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…...
grafana + Prometheus + node_exporter搭建监控大屏
本文介绍生产系统监控大屏的搭建,比较实用也是实际应用比较多的方式,希望能够帮助大家对监控系统有一定的认识。 0、规划 grafana主要是展示和报警,Prometheus用于保存监控数据,node_exporter用于实时采集各个应用服务器的事实状…...
【腾讯云】docker创建网络遇到Unable to enable SKIP DNAT rule
docker创建网络遇到Unable to enable SKIP DNAT rule 背景 今天打算在服务器上安装es,但是在创建网络时,提示 Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER…...
DeepSeek R1模型解读与使用
DeepSeek在推出R1预览版两个月后,发布了R1的正式版本,并且开源了模型,开放了API调用。我们直接来解读一下这款模型。 这是官方的性能评测图。从左到右分别是DeepSeek-R1,o1正式版,32B蒸馏版R1,o1-mini&…...
AI新玩法:Flux.1图像生成结合内网穿透远程生图的解决方案
文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在这个AI技术日新月异的时代,图像生成模型已经成为了创意工作者和开发者手中…...
api开发如何确保通过非官方库解析口令的合法性?
通过非官方库解析淘宝口令可能存在违反淘宝平台规则以及法律法规的风险,很难完全确保其合法性。如果确实有需求,可从以下几个方面尽量降低风险,提高合法性: 了解法律法规 《中华人民共和国网络安全法》:需确保解析行为…...
第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)
1.ThreadGroup 与 Thread 在Java程序中, 默认情况下, 新的线程都会被加入到main线程所在的group中, main线程的group名字同线程名。如同线程存在父子关系一样, Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…...
如何使用Python脚本将本地项目上传到 GitHub
前言 这里我们通过创建一个新的github仓库,来测试我们的脚本能否上传我们本地的项目,并且进行更新。首先你需要先安装 Git,关于这部分我好像没有记录过,这里我搜索看了一下,这篇博客写的Git安装详解应该是比较齐全的&…...
css动画水球图
由于echarts水球图动画会导致ios卡顿,所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…...
Shellcode
什么是shellcode shellcode通常是软件漏洞利用过程中使用一小段机器代码 作用 1.启动shell,进行交互 2.打开服务器端口等待连接 3.反向连接端口 4.。。。 如何编写shellcode 1.设置rdi指向/bin/sh 2.rsi0,rdx0 3.rax0x3b 4.syscall进行系统调用 64位系统…...
Element使用表单重置如果不使用prop,重置无法生效
文章目录 为什么需要 prop?示例:使用 prop 的正确方式关键点总结 在 element-ui 的 el-form 组件中, prop 属性是与表单验证和表单字段绑定密切相关的,尤其在使用 resetFields() 重置表单数据时。 如果不使用 prop࿰…...
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…...
两台局域网电脑通过飞秋传输大文件失败的解决方案
问题描述: 局域网两台电脑之间传输大文件(超过20G),不想太复杂,就各装个飞秋。但是通过直接发送文件发现总是失败,一会就中断了。 解决方法: 主界面上有一个文件共享的按钮,通过文…...
安卓程序作为web服务端的技术实现(二):Room 实现数据存储
已经实现web服务器安卓程序作为web服务端的技术实现:AndServer 实现登录权限拦截-CSDN博客 现在需要和正常web项目类似,那么就需要操作数据库 一般web项目都是选择较为重型的数据库如MySQL,SQL server等 这里是安卓项目,我目前…...
代码工艺:实践 Spring Boot TDD 测试驱动开发
TDD 的核心理念是 “先写测试,再写功能”,其过程遵循一个严格的循环,即 Red-Green-Refactor: TDD 的流程 1. Red(编写失败的测试) 根据需求,先编写一个测试用例,描述期望的行为。…...
MySQL命令及用法(精华版)
目录 DDL(数据定义语言) 数据库操作 表操作 DML(数据操作语言) DQL(数据查询语言) 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 DCL(数据控制语言) 用户…...
73,【5】BUUCTF WEB [网鼎杯 2020 玄武组]SSRFMe(未解出)
进入靶场 又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码 <?php // 检查 URL 是否为内部 IP 地址 function check_inner_ip($url) {// 使用正则表达式检查 URL 格式是否以 http、https、gopher 或 d…...
修改word的作者 最后一次保存者 总编辑时间 创建时间 最后一次保存的日期
作者: 1.打开word文件 2.点击左上角的文件 3.选项 4.用户信息 5.将用户信息中的 姓名改为你需要的名字 最后一次保存者 1.word重命名为.zip文件 2.docProps中有个core.xml 3.用记事本打开有个lastModifiedBy标签,将里面内容改为你需要的名字 总编辑时…...
深入MapReduce——引入
引入 前面我们已经深入了HDFS的设计与实现,对于分布式系统也有了不错的理解。 但HDFS仅仅解决了海量数据存储和读写的问题。要想让数据产生价值,一定是需要从数据中挖掘出价值才行,这就需要我们拥有海量数据的计算处理能力。 下面我们还是…...
Formality:不可读(unread)的概念
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念,本文就将对此…...
leetcode刷题记录(八十一)——236. 二叉树的最近公共祖先
(一)问题描述 236. 二叉树的最近公共祖先 - 力扣(LeetCode)236. 二叉树的最近公共祖先 - 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科 [https://baike.baidu.com/item/%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B…...
C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。
代码如下: #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...
特征选择(机器学习)
目录 1. 为什么需要特征选择2. 常见的特征选择方法2.1 过滤式(Filter Methods)小示例(用 Python 伪代码表达): 2.2 包裹式(Wrapper Methods)小示例(RFE 伪代码示例)&…...
基于微信小程序的个人健康管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...