我们经常写一个文件test.c
他是一个叫做源文件或者源程序的东西
这个test.c文件经过一个详细的处理会变成test.exe文件
test.exe可执行程序
过去我们没有关注这整个过程,我们只是关注这个过程中出现错误我们该怎么办?
实际上test.c经过(编译)(链接)才会变成test.exe文件
文件预处理就是解释(编译)(链接)这两个过程
---------前言
(文章内//比较多,文章编译时,有时候需要对齐,还有一些格式,没有//不好弄,给您带来不便,敬请谅解。)
延申:test.c—(编译)(链接)—>test.exe–(运行)–>

//我们先写一个正确的代码(随便写)

//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//例:你写的代码保存在桌面
//先不运行上述代码,从桌面打开今日写的代码文件,此时会出现一些小文件,自己截图
//退出文件
//运行代码,打开文件,此时会发现出来一个新的文件Debug
//Debug调试版本
//打开Debug文件会发现一个叫做test.exe的文件
//双击这个文件,则会运行这个文件,双击,此时会发现屏幕一闪而过
//退出上一级
//打开(和今日写的代码文件)一样的文件
//此时也会出现一个Debug文件,打开Debug这个文件
//此时需要关注一个文件夹(test.obj )

//这个过程会出现一些中间运行的文件,即:(编译链接)产生的东西
//test.c-- - (编译)(链接)—>test.exe
//test.exe可执行程序

//程序的翻译环境和执行环境
//在ANSI C的任何一种实现中,存在两个不同的环境。

//第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
//解释:桌面打开文件—>打开Debug文件—>用notepad++打开(test.exe)
//此时出现一大堆我们看不懂的内容,因为里面的内容是用二进制写的,
//即:test.exe里面是二进制信息(二进制文件)
//test.c-- - (编译)(链接)—>test.exe–(运行)–>
//test.c 里面是 :c代码。c代码是文本文件

//第2种是执行环境,它用于实际执行代码。

//通俗解释:
//test.c到test.exe之间的过程所依赖的整个环境被叫做:翻译环境
//test.exe–(执行)–> 所依赖的环境叫做运行环境

//翻译环境
//一个工程里面会有几个文件
//此时我们创建一个add.c源文件

//int main(int x, int y)
//{
//	return  x + y;
//}

总体流程:

//源文件------》编译器---------》目标文件--丨
//                                         丨
//源文件------》编译器---------》目标文件--丨
//                                         丨
//源文件------》编译器---------》目标文件--丨
//                                         丨
//链接库------》连接器《---------------------
//                丨
//                v
//             可执行程序

//一个工程会有多个 (.c文件)对应上面图片的(源文件)
//任何一个源文件都会单独作为一个单元被编译器的单独处理会生成自己对应的目标文件
//翻译环境中的编译工作便是由编译器完成的
//test.obj叫做
//object 中文翻译:对象;目标

#include <stdio.h>
//声明一下来自外部文件的函数
//extern int Add(int x, int y);
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int c = Add(a, b);
//	printf("c = %d\n", c);
//	return 0;
//}
//运行结果:c = 30

//此时从桌面打开今日代码–》打开和今日代码相同的文件–》打开Debug文件
//此时会看见(add.obj)和( test.obj)
//即:test.c 会生成 test.obj
// add.c 会生成 add.obj
//即:每个源文件经过编译器都会生成属于自己的目标文件(obj)
//然后(每个目标文件)都会和(链接库)经过(连接器)的处理会生成(可执行程序)

//test.c—(编译)(链接)—>test.exe–(运行)–>
//其中编译依赖编译器,编译走的整个过程叫做:编译
// 链接依赖连接器,链接走的整个过程叫做:链接
//链接器:linker

//官方解释:
//1.组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。
//2.每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
//1.2.上面都有解释
//3.链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。
//通俗解释:
//目标文件经常会使用一些库函数,这些库函数不一定都是源文件里面定义的,而是在标准库里面定义的
//例如:我们经常会使用一个叫做printf的函数,他所需要的头文件是#include<stdio.h>
// 从MSDN中搜索printf,里面会有一个libraries(库)(静态库)(库文件)
// libraries下面会有三个库(都是.LIB)文件
// printf其实放在这三个库中
// 你使用printf,其实是使用这三个库
//即:你的目标文件需要使用printf函数,就是把(.LIB)文件这种(链接库)链接进来

//test.c----------------------------------------->test.exe–(运行)–>
//-------------翻译环境--------------------------
//【----编译(编译器)–】【—连接(连接器)–】
//—其中编译会生成–》目标文件

//其中编译本身也分为三个阶段【预编译】【编译】【汇编】
//此时需要 虚拟机
//创建一个文件test.c,然后写代码(随便写)

//定义一个全局变量
//#include <stdio.h>
//int g_val = 1000; 
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//保存这个代码test.c,这个文件我们称之为:源文件

//1. 预处理 选项 gcc - E test.c - o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。
//2. 编译 选项 gcc - S test.c 编译完成之后就停下来,结果保存在test.s中。
//3. 汇编 gcc - c test.c 汇编完成之后就停下来,结果保存在test.o中。

//此时输入:gcc test.c–》回车
//如果此时没有任何提示,则证明代码没有任何问题
//此时输入:ls
//此时会生成一个(a.out)文件
//a.out就是我们最终生成的可执行程序
//a.out是默认的,他的名字你可以自己随便修改
//修改名字:
//此时输入:gcc test.c -o test–》回车–》输入ls看一下
//此时会产生a.out test
//这里的a.out和test只是名字不一样,其内容是一样的
//此时我们返回原来的情况,为了不添麻烦
//输入:rm -f test–》回车–》输入ls
//此时便恢复正常,下一行出现:a.out test.c
//执行代码:
//输入:./a.out(执行当前目录的a.out文件)(. 叫做当前目录)
//回车,此时会出现结果:
// 0 1 2 3 4 5 6 7 8 9 【自己名字】(自己定义的)(不影响)
//test.c经过(gcc test.c)便会直接生成a.out

//此时输入:rm -f a.out–》回车–》输入:s–》回车
//此时我们便把a.out删除,
//输入:ls(显示)–》回车
//屏幕下一行显示为:
//test.c

//【1. 预处理 选项 gcc - E test.c - o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。】
//此时输入:gcc - E test.c–》回车(进行预编译/预处理)
//此时屏幕会出现一大堆不认识的(预处理之后产生的结果)
//此时生成的这些不好观察,我们可以把它放到文件里面去
//输入:gcc -E test.c > test.i
//(>叫做重定项)(重定项到一个文件里面)
//test.i是新建的文件
//预编译的过程中就会产生test.i维护的文件,此时默认产生这个文件(方便)
//回车–》输入ls–》
//此时便会产生一个test.i文件
//输入:vim test.i (打开test.i文件)
//此时面前会有855行代码,我们到最后几行去看
//841到855行代码是自己写的代码,上面的都不是
//此时输入: shift + ; 便会关闭
//观察自己写的代码和test.i文件里面的代码
//自己写的test.c中最前面几行中的#include<stdio.h>被替换成test.i文件中上面的(1-840)
//则可以证明头文件在预处理中,便被已经被翻译
//预处理的过程
//1.#include 头文件的包含(将include里面的内容搬运到文件里面去)
//2.将#include里面的注释删除(我们在看test.i和include<stdio.h>里面会发现)
// 还有test.c里面所有注释都删除
// 注释删除的方法:用空格替换
//3.#difine 预处理会将里面所以的值直接改成目标
//以上皆为文本操作

//【2. 编译 选项 gcc - S test.c 编译完成之后就停下来,结果保存在test.s中。】
//总体:test.i–》test.s文件
// 把c语言代码翻译成汇编代码
//具体步骤:1.语法分析 2.词法分析 3.语义分析 4.符号汇总
//符号汇总:一般汇总的符号都是函数名,全局变量之类的
//《程序员的自我修养》对具体不走里面的内容进行了详细分析
//输入:gcc - S test.i–》LS
//此时会生成test.s文件
//test.c–(预编译)gcc - E test.c–》test.i–(编译)gcc - S test.c --》test.s–。。。。。。
//输入:vim test.s(打开test.s文件)
//test.s文件里面放的是汇编指令,写的是汇编代码

//【3. 汇编 gcc - c test.c 汇编完成之后就停下来,结果保存在test.o中。】
//总体:把汇编代码转换成二进制指令;形成符号表
//输入:ls 看一下现在有什么文件
//test.c test.i test.s
//输入:gcc - c test.c --》回车–》ls–》
//此时会出现:test.c test.i test.o test.s
//虚拟机上面的test.o文件就是 我们电脑上面的test.obj文件
//test.o / test.obj 目标文件
//输入:vim test.o(打开)
//会出现一大堆我们看不懂的

//形成符号表:
//add.c文件
//int Add(int x, int y)
//{
//	return  x + y;
//}
//这个里面的符号Add
//test.c文件
//extern int Add(int x, int y);
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int c = Add(a, b);
//	printf("c = %d\n", c);
//	return 0;
//}
//这个里面的符号:Add main
//符号表格式:符号  地址

//test.o/test.obj文件经过链接形成test.exe文件(可执行程序)
//链接:1.合并段表 2.符号表的合并和符号的重定位
//1. 合并段表
//以.o为例
//test.o add.o文件是目标文件
//目标文件都有自己的格式:.o文件会把自己分成几个段(elf格式)
//合并段表会把对应的段链接在一起
// 2.符号表的合并和符号的重定位
//直接合并,有时候会遇见相同的符号,但是他们的地址不一样,此时我们要用(有效的)
//以上面代码为例:add.o和test.o文件里面的Add我们选择add.o
//因为test.o文件里面的Add,只是声明,没有实际应用
//add.c文件里面的符号表是: Add 有效地址
//test.c文件里面的符号表是:
//Add 无效地址
//main 有效地址
//当代码运行的时候,运行到符号的时候,他会自动去寻找这个符号的地址,如果没有(无效地址)则会运行错误

//运行环境
//程序执行的过程:
//1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
//解释:当你要执行代码的时候,双击便会运行,其实运行的过程是由操作系统把程序加载到内存里面去
// 如果没有操作系统,则需要手动完成,把程序放到内存里面去运行
//2. 程序的执行便开始。接着便调用main函数。
//3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
//4. 终止程序。正常终止main函数;也有可能是意外终止。

//预处理详解(预处理=预编译)
//预定义符号(本身就有,不是自己定义的)(自己定义的符号叫做:定义符号)
//例如:
//#define MAX 100 自己定义的符号
//预定义符号:
//FILE //进行编译的源文件
//LINE //文件当前的行号
//DATE //文件被编译的日期
//TIME //文件被编译的时间
//STDC //如果编译器遵循ANSI C,其值为1,否则未定义
//STDC 在 vc2013中不支持
//在linux中可以使用

//在linux输入
//#include<stdio.h>
//int main()
//{
//	printf("%d\n", __STDC__);
//	return 0;
//}
//输出:1
//举例:
//int main()
//{
//	printf("%s\n", __FILE__);
//	printf("%d\n", __LINE__);
//	return 0;
//}
//运行:此时会出现你现在写的代码的(绝对路径)
//      printf("%d\n", __LINE__);这句代码所在的行数
//应用:写日记
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	FILE* pf = fopen("log.txt", "w");
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//		fprintf(pf, "file:%s line:%d date:%s time:%s i=%d\n", 
//			__FILE__, __LINE__, __DATE__, __TIME__, i);
//		printf("%s\n", __FUNCTION__);//打印函数名称
//	}
//	fclose(pf);
//	pf = NULL;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//输出:10个main
//      0-9
//在外部打开会发现有一个log.c文件--》打开
//会出现一些日期,即:我们运行代码时的时间地址等等

//#define 预处理指令,是在预处理阶段处理的
//预处理指令:#define #include #pragma pack() #if #endif #ifdef #line(#开头的指令基本都是)
//1.#define 定义标识符
//2…#define 定义宏

//1.#define 定义标识符
//#define MAX 100
//int main()
//{
//	int a = MAX;
//	printf("%d\n", MAX);
//	return 0;
//}
//可以定义任何东西 字符 数字 重命名 一段代码  
//在define定义标识符的时候,不要在最后加上; ?
//解释:#define会把后面定义的所有内容替换过去,如果加入了,容易导致语法错误

//#define 定义宏
//#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(definemacro)。
//下面是宏的申明方式:
//#define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。
//注意: 参数列表的左括号必须与name紧邻。 如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

//#define SQUARE(X) X*X
//int main()
//{
//	int ret = SQUARE(5);
//	printf("%d\n", ret);
//	return 0;
//}
//输出:25//#define SQUARE(X) X*X
//int main()
//{
//	int ret = SQUARE(5 + 1);
//	printf("%d\n", ret);
//	return 0;
//}
//输出:11   5 + 1*5 +1 = 11//#define SQUARE(X) (X)*(X)
//int main()
//{
//	int ret = SQUARE(5 + 1);
//	printf("%d\n", ret);
//	return 0;
//}
//输出:36//#define MAX 100
//#define DOUBLE(X) X+X
//int main()
//{
//	int a = 5;
//	int ret = 10 * DOUBLE(MAX);
//	printf("MAX = %d\n", MAX);
//	//int ret = 10* ((a)+(a));
//	printf("%d\n", ret);
//	return 0;
//}
//输出:MAX=100
//      1100//#define MAX 100
//#define DOUBLE(X) ((X)+(X))
//int main()
//{
//	int a = 5;
//	int ret = 10 * DOUBLE(MAX);
//	printf("MAX = %d\n", MAX);
//	printf("%d\n", ret);
//
//	return 0;
//}
//输出:MAX=100
//      2000

//提示:
//所以用于对数值表达式进行求值的宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中的操作符或
//邻近操作符之间不可预料的相互作用。
//#define 替换规则
//在程序中扩展#define定义符号和宏时,需要涉及几个步骤。
//1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。
//2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。
//3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。
//注意:
//1. 宏参数和#define 定义中可以出现其他#define定义的变量。但是对于宏,不能出现递归。
//2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。
//字符串里面的符号不会被替换

//#和##

//#
//void print(int a)
//{
//	printf("the value of a is %d\n", a);
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	print(a);
//	print(b);
//	return 0;
//}
//想输出:the value of 字符 is 字符所对应的数字
//上述方法(函数)绝对不可能解决这个问题//int main()
//{
//	printf("hello world\n");
//	printf("hello " "world\n");
//	printf("hel" "lo " "world\n");
//	return 0;
//}
//输出都一样:hello word//#define PRINT(X) printf("the value of " #X " is %d\n", X)
//int main()
//{
//	int a = 10;
//	int b = 20;
//	PRINT(a);
//	PRINT(b);
//	return 0;
//}
//此时便达到我们的要求

//##的作用
//##可以把位于它两边的符号合成一个符号。 它允许宏定义从分离的文本片段创建标识符。
//#define CAT(X, Y) X##Y
//
//int main()
//{
//	int Class84 = 2019;
//	//printf("%d\n", class84);
//	printf("%d\n", CAT(Class, 84));
//	//printf("%d\n", Class##84);
//	//printf("%d\n", Class84);
//	return 0;
//}

//带副作用的宏参数
//当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能出现危险,导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果。 例如:

//一般情况下的副作用举例:
//方法一:
//int main()
//{
//	int a = 10;
//	int b = a + 1;
//	printf("%d ", a);
//	printf("%d ", b);
//	return 0;
//}
//输出:10 11
//方法二:
//int main()
//{
//	int a = 10;
//	int b = ++a;
//	printf("%d ", a);
//	printf("%d ", b);
//	return 0;
//}
//输出:11 11
//解释:我们想要的到一个b=11,我们可以用两种方法,即:方法一和方法二
//      但是方法二会改变a的值,而方法一不会。
//带有宏参数的副作用举例:
//一:
//#define MAX(X, Y)     ((X)>(Y)?(X):(Y))
//int main()
//{
//	int a = 10;
//	int b = 11;
//	int max = MAX(a, b);
//	printf("%d\n", max);//11
//	printf("%d\n", a);//10
//	printf("%d\n", b);//11
//	return 0;
//}//二:
//#define MAX(X, Y)     ((X)>(Y)?(X):(Y))
//int main()
//{
//	int a = 10;
//	int b = 11;
//	int max = MAX(a++, b++);
//	//int max = ((a++) > (b++) ? (a++) : (b++));
//	printf("%d\n", max);//12
//	printf("%d\n", a);//11
//	printf("%d\n", b);//13
//	return 0;
//}
//解释://int max = ((a++) > (b++) ? (a++) : (b++));
//                    1        2       3       4
//1和2 都会先用a和b,然后对a和b进行++,此时a=11,b==12.
//判断结果:a<b
//执行4,此时输出b,然后对b进行++,此时b=13
//函数和宏进行比较(性能):
//函数
//int Max(int x, int y)
//{
//	return (x > y ? x : y);
//}
////宏
//#define MAX(X, Y) ((X)>(Y)?(X):(Y))
//int main()
//{
//	int a = 10;
//	int b = 20;;
//	int max = Max(a, b);
//	printf("max = %d\n", max);
//	max = MAX(a, b);
//	printf("max = %d\n", max);
//	return 0;
//}
//此时没有任何问题,都能进行比较
//函数
//int Max(int x, int y)
//{
//	return (x > y ? x : y);
//}
//
//float Max2(float x, float y)
//{
//	return (x > y ? x : y);
//}
////宏
//#define MAX(X, Y) ((X)>(Y)?(X):(Y))
//int main()
//{
//	float c = 3.0f;
//	float d = 4.0f;
//
//	float max = Max2(c, d);
//	printf("max = %lf\n", max);
//
//	max = MAX(c, d);
//	max = ((c) > (d) ? (c) : (d));
//	printf("max = %lf\n", max);
//	return 0;
//}
//如果我们改变比较数字的类型,我们则需要重新写函数,而宏不需要
//如果我们把数字的类型搞错,我们用函数,则可以进行检查
//各有千秋
////函数
//int Max(int x, int y)
//{
//	return (x > y ? x : y);
//}
//
//float Max2(float x, float y)
//{
//	return (x > y ? x : y);
//}
//
////宏
//#define MAX(X, Y) ((X)>(Y)?(X):(Y))
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	float c = 3.0f;
//	float d = 4.0f;
//	//函数在调用的时候
//	//会有函数调用和返回的开销
//	float max = Max2(c, d);
//	printf("max = %lf\n", max);
//
//	//预处理阶段就完成了替换
//	//没有函数的调用和返回的开销
//	max = MAX(c, d);
//	//直接就翻译成:max = ((c) > (d) ? (c) : (d));
//	printf("max = %lf\n", max);
//	return 0;
//}
//先按 f11 --》出现很多文件--》关闭所有选项
//鼠标右键--》转到反汇编--》按f11一直走
//	当出现float max = Max2(c, d);我们观察这句代码下面的反汇编代码
//他执行的代码我们按f11会看到(注意行数)
//同理:运行到max = MAX(c, d);时,我们看反汇编里面运行了多少代码
//明显宏用的比函数的少,则宏效率更高

//宏相比较于函数的优点:
//1. 用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。
//2. 更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使用。反之这个宏怎可以适用于整形、长整型、浮点型等可以用于>来比较的类型。宏是类型无关的。
//3. 宏有时候可以做函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。

//【3. 宏有时候可以做函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。】
//举例:
//#define SIZEOF(type) sizeof(type)
//int main()
//{
//	int ret = SIZEOF(int);
//	//int ret = sizeof(int);
//	printf("%d\n", ret);//4
//	return 0;
//}//我们平常使用malloc时,特别别扭,int* p = (int*)malloc(10*sizeof(int));我们要计算大小,还要强制类型转换,感觉挺复杂的
//#define MALLOC(num, type) (type*)malloc(num*sizeof(type))
//int main()
//{
//	int* p = (int*)malloc(10*sizeof(int));
//	
//	int* p = MALLOC(10, int);
//	//int* p = (int*)malloc(10 * sizeof(int));
//	return 0;
//}

//宏相比较于函数的缺点:
//1. 每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序的长度。
//解释:宏可以定义一段很长的代码,当函数运行的时候,我们引用了这段宏很多次,那么这整个代码则会特别长
//2. 宏是没法调试的。
//3. 宏由于类型无关,也就不够严谨。
//4. 宏可能会带来运算符优先级的问题,导致程容易出现错。
//函数传值的时候是先计算,然后再传,宏直接替换


//总结:
//属性                    #define定义宏                                            函数
//代码长度          每次使用时,宏代码都会被插入到程序中。除了非常小的宏    函数代码只出现于一个地方;每次使用这
//                  之外,程序的长度会大幅度增长                            个函数时,都调用那个地方的同一份代码
//执行速度          更快                                                    存在函数的调用和返回的额外开销,所以相对慢一些
//操作符优先级      宏参数的求值是在所有周围表达式的上下文环境里,除非加    函数参数只在函数调用的时候求值一
//                  上括号,否则邻近操作符的优先级可能会产生不可预料的后    次,它的结果值传递给函数。表达式
//                  果,所以建议宏在书写的时候多些括号。                    的求值结果更容易预测。
//带有副作用的参数  参数可能被替换到宏体中的多个位置,所以带有副作用的参    函数参数只在传参的时候求值一次,
//                  数求值可能会产生不可预料的结果。                        结果更容易控制。
//参数类型          宏的参数与类型无关,只要对参数的操作是合法的,它就可    函数的参数是与类型有关的,如果参数的类型不同,
//                  以使用于任何参数类型。                                  就需要不同的函数,即使他们执行的任务是不同的。
//调试              宏是不方便调试的                                        函数是可以逐语句调试的
//递归              宏是不能递归的                                          函数是可以递归的

//命名约定:
//一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者。 那我们平时的一个习惯是:
//把宏名全部大写 函数名不要全部大写

//#undef
//这条指令用于移除一个宏定义。
//#undef NAME
//如果现存的一个名字需要被重新定义,那么它的旧名字首先要被移除。
//#define MAX 100
//int main()
//{
//	printf("MAX = %d\n", MAX);
//#undef MAX
//	printf("MAX = %d\n", MAX);
//	return 0;
//}
//输入这段代码,我们可以明显看见第二个printf("MAX = %d\n", MAX);中的MAX下面有波浪线(有问题),则证明移除成功
//命令行定义
//许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。 例如:当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大写,我们需要一个数组能够大写。)
//用linux
//int main()
//{
//	int arr[sz] = { 0 };
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		arr[i] = i;
//	}
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//运行:出错
//此时我们输入:gcc test.c -D sz=10
//运行:正常  
//输出:0 1 2 3 4 5 6 7 8 9 
//此时我们输入:gcc test.c -D sz=13
//运行:正常
//输出:0-12的数字

//条件编译:
//在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令
//#define DEBUG
//int main()
//{
//	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = 0;
//#ifdef DEBUG//如果DEBUG这个被定义过,则执行下面的代码
//		printf("%d ", arr[i]);
//#endif
//	}
//	return 0;
//}//int main()
//{
//	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = 0;
//#ifdef DEBUG//如果DEBUG这个被定义过,则执行下面的代码
//		printf("%d ", arr[i]);
//#endif
//	}
//	return 0;
//}
//对比上下代码,我们可以看见第二个代码下面的printf("%d ", arr[i]);明显便灰

//常见条件编译指令:

//1.
//#if 常量表达式
////...
//#endif
////常量表达式由预处理器求值。
//int main()
//{
//	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
//	int i = 0;
//
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = 0;
//#if 1+1//常量表达式,如果为真,则执行下面语句
////#if 0 //此时则不会执行
//		printf("%d ", arr[i]);
//#endif
//	}
//
//	return 0;
//}

//2.多个分支的条件编译
//#if 常量表达式
////…
//#elif 常量表达式
////…
//#else
////…
//#endif
//个人理解:相当于if语句

//3.判断是否被定义 defined定义
//#if defined(symbol)
//#ifdef symbol

//#if !defined(symbol)
//#ifndef symbol

//都需要假如enfif结束
//#if defined(symbol)
//如果 定义 这个符号 则执行下面代码

//4.嵌套指令
//#if defined(OS_UNIX)
//        #ifdef OPTION1
//                unix_version_option1();
//        #endif
//        #ifdef OPTION2
//                unix_version_option2();
//        #endif
//#elif defined(OS_MSDOS)
//        #ifdef OPTION2
//                msdos_version_option2();
//        #endif
//#endif

//文件包含
//我们已经知道, #include 指令可以使另外一个文件被编译。就像它实际出现于 #include 指令的地方一样。这种替换的方式很简单: 预处理器先删除这条指令,并用包含文件的内容替换。 这样一个源文件被包含10次,那就实际被编译10次。
//1.头文件被包含的方式:
//(1)本地文件包含
//(2)库文件包含
//个人理解:使用库文件#include<库函数>
// 使用本地文件#include “自己的”
//查找策略:"" 先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。 如果找不到就提示编译错误。
// 自己写的 库文件里面
// <> 查找头文件直接去标准路径下去查找,如果找不到就提示编译错误。

//2.嵌套文件包含
//一个头文件我们有时候会引用许多次,这样会造成空间和时间的浪费
//解决方法:条件编译。

//例如:判断test.h是否已经被引用
//每个“头文件” 的开头写:
//#ifndef TEST_H
//#define TEST_H
////头文件的内容
//#endif

//#pragma once
//头文件的内容

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 去除页面多次双击时出现的蓝色背景

    -moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/user-select: none;...

    2024/4/23 16:12:34
  2. codeblocks简单的背景及字体设置(及默认工作路径设置)

    codeblocks简单的背景及字体设置(及默认工作路径设置) 一、字体设置二、代码背景设置三、光标宽度及颜色设置四、左侧行号颜色、背景及行号与代码块之间背景设置五、默认工作路径设置最后效果...

    2024/5/6 9:57:00
  3. python学习---numpy例子股票的简单操作

    ###利用numpy进行历史股价分析 import sys import numpy as np #读入文件 c,v = np.loadtxt(data.csv,delimiter= ,,usecols= (6,7),unpack=True) #print(c) #print(v) #计算成交量加权平均价格 vwap = np.average(c,weights = v) print("VWAP =",vwap) #算数平均值函…...

    2024/4/23 16:12:33
  4. Java点餐系统和点餐小程序新加排号等位功能

    最近忙着创业,好久没有写文章了。今天就抽空给点餐系统加一个排号等位功能,想加这个功能很久了,一直没有瞅到时间写。今天就把这个功能实现了,顺便写个文章出来。老规矩,先给大家看效果图只顾实现功能了,ui没怎么美化,后面有时间再做下ui美化吧。下面就来给大家讲解下。…...

    2024/5/6 12:54:15
  5. postman关联步骤

    步骤1:获取红色的{“referer”:“http://47.107.178.45/phpwind/read.php?tid=68814&fid=82”,“refresh”:true,“state”:“success”,“data”:"",“message”:["\u64cd\u4f5c\u6210\u529f"],"__error":""} 步骤2:用正则获取…...

    2024/5/6 6:07:17
  6. C++之类

    文章目录可变数据成员返回*this指针(返回调用函数对象的引用)的妙用友元函数构造函数构造函数的初始值有时必不可少委托构造函数explicit关键字 可变数据成员 有时会发生这样一种情况,我们希望能修改类的某个数据成员,即使在一个const成员函数内,可以通过在变量的声明中加…...

    2024/4/23 16:12:29
  7. appium+python+夜神模拟器+jenkins进行android端自动化测试

    1. 环境搭建序号依赖环境安装备注1Jdk安装包安装安装完成后配置环境变量 新增JAVA_HOME为jdk安装路径 C:\Program Files\Java\jdk1.8.0_111 Path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin2Androidsdk解压即可配置环境变量,同上 Path中增加sdk的tools和platform-tool…...

    2024/4/23 16:12:31
  8. linux fork()返回值

    fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。 特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程中返回0。fork失败返回负数,发生在PID个数达上限或内存不足时…...

    2024/4/23 16:12:30
  9. Thinking in Java第六章(访问权限控制)查漏

    1.静态导入(static import)是用来减少代码繁琐程度的,,但是是以可读性为代价。 是针对具体的静态方法来使用的,静态变量是不行的。。普通的导入是针对具体的类来使用的。额,,还是上代码说明吧。。package Demo1 public class Print(){public static void print(Object obj)…...

    2024/4/16 23:19:06
  10. RDD简介

    RDD - 弹性分布式数据集 (Resilient Distributed DataSet) 什么是RDDRDD是一个基本的抽象,操作RDD就像操作一个本地集合一样,降低了编程的复杂度; 操作RDD,其实是对每个分区进行操作,分区会生成Task,Task会调度到Executor上执行相关的计算逻辑,进而对数据进操作与本地集…...

    2024/4/15 7:36:49
  11. 全流程电子化商事登记服务项目技术解决方案V1.0.1-10.13_-_评估稿

    全流程电子化商事登记服务 项目技术解决方案V1.0.1 2017 年 10 月 版本历史记录序号 版本 修改人 修改内容 日期1 V1.0.0 朱昱玮 编制方案 2017-9-302 V1.0.1 朱昱玮 修订方案 2017-10-10目 录1 项目概况 11.1 项目背景 1 1.2 项目目标 1 1.3 术语及缩略语 2 2 项目需求系统功能…...

    2024/4/26 0:46:49
  12. 【licode】erizo 与每个客户端的 ICE 流程以及数据流的收发

    看这篇文章,ICE 流程走完了,piasy的p2p 文档后面ICE 建立连接有问题,只能看代码了了。服务端大神总结文章 erizo 与每个客户端的 ICE 流程以及数据流的收发 erizo 是 Licode 实现 SFU 的模块,使用 c++ 语言编写,以 so 的形式提供给使用者进行二次开发。 实现的功能分为两块…...

    2024/4/20 13:06:12
  13. vmware配置NAT模式

    vmware虚拟机上安装的linux系统,虚机可以访问外网。一开始使用了仅主机模式,一直调试不成功,后来搜索资料才发现NAT模式是可以访问外网,主机模式只可以访问宿主网络和局域网。下面就记录下 NAT 模式的安装: NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。…...

    2024/4/16 23:19:12
  14. TCP/IP 基础知识

    本文章是我在学习时的总结,供大家交流探讨,后续会更新每一层的协议和相关知识点TCP/IP是通信协议的统称,也被称作互联网协议TCP/IP发展历程OSI(Open Systems Interconnection 开放式通信系统互联参考模型)是由ISO(International Organization for Standards 国际标准化组…...

    2024/4/16 23:18:54
  15. Hashtag-Based Sub-Event Discovery Using Mutually Generative LDA in Twitter 阅读笔记

    《Hashtag-Based Sub-Event Discovery Using Mutually Generative LDA in Twitter》 该文章来源于Thirtieth Aaai Conference on Artificial Intelligence 2016 。本文主要是关注于子事件发现。 子事件发现是在twitter中进行社会实践分析的一种有效的方法,它能够从推特中大量嘈…...

    2024/4/16 23:18:54
  16. Windows 部署SFTP服务端

    需求:工作中需要接收外部机构的文件,要搭建一个SFTP服务器。Linux中SFTP是自带的服务,Windows上要额外安装软件,这里用免费的FreeSSHd,配置很简单。但也有局限性,听说FreeSSHd 从2009年就停止维护了,所以要搭建SFTP服务首选还是Linux系统。1、下载和安装FreeSSHd下载链接…...

    2024/4/16 23:19:06
  17. 秒杀10--分布式session

    秒杀10–分布式session 这个分布式session很重要,因为这个秒杀功能是一个基础,我们在实现这个功能的时候,肯定不是用一台服务器,肯定是用多台服务器实现分布式的session功能。这时候就涉及到一个问题,就是分布式session该如何处理呢? 业界通常的做法: 登录成功以后,给这…...

    2024/4/23 16:12:27
  18. olympicCTF-Misc-base64stego

    文章目录base64stego题目分析总结 base64stego题目分析 题目给了一堆base64编码,解码后发现是一段关于steganography的英文介绍。换思路,题目的标题是base64stego,而steg是影写术前几个字母,可能是base64影写。可以参考这篇文章-------> base64影写简单的说:Base64要求…...

    2024/4/28 21:45:19
  19. JavaScript 04 - 数据类型

    数据类型11 - 变量的数据类型12 - 数字型Number13 - isNaN14 - 字符串型String15 - 弹出警示框案例16 - 字符串拼接17 - 字符串拼接加强18 - 显示年龄案例19 - 布尔型Boolean19-布尔型Boolean20 - 获取变量数据类型21 - 字面量22 - 转换为字符型23 - 转换为数字型24 - 计算年龄…...

    2024/4/23 16:12:28
  20. 入职华为一周,与大家分享一下生活

    这是我写的第一篇博客,尽可能描述的详细一些,后续还会经常不定期更新在华为的日常以及做一些技术分享,希望大家可以关注啊!本人本科普通一本,研究生为985院校毕业,均不是计算机专业。校招进入的华为,其实也拿了一些其他的offer,但是没有拿到BAT大厂的offer,综合之下选…...

    2024/4/23 16:12:25

最新文章

  1. Android中TabLayout与ViewPager结合使用生命周期详解

    博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到教程 效果 使用的布局如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> …...

    2024/5/6 13:00:20
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 题解

    VP比赛链接 : 数据加载中... - 蓝桥云课 1 . 九进制 转 十进制 直接模拟就好了 #include <iostream> using namespace std; int main() {// 请在此输入您的代码int x 22*92*81*9;cout << x << endl ;return 0; } 2 . 顺子日期 枚举出每个情况即可 : …...

    2024/5/5 0:46:46
  4. 鹅厂实习offer

    #转眼已经银四了&#xff0c;你收到offer了吗# 本来都打算四月再投实习了&#xff0c;突然三月初被wxg捞了&#xff08;一年前找日常实习投的简历就更新了下&#xff09;&#xff0c;直接冲了&#xff0c;流程持续二十多天&#xff0c;结果是运气还不错&#xff0c;应该是部门比…...

    2024/5/1 13:19:09
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57