2021寒假专题5
该专题介绍C语言库函数中
远端跳转、信号处理、变参支持、常用宏以及stdlib.h的内存管理、终止程序、执行命令、环境变量
include <setjmp.h>
#include <stdio.h>
//非局部跳转 跨函数跳转 在没有函数调用关系的情况下跳转 
//局部跳转:if  while   switch goto
//setjmp 设置 
//longjmp 开始执行跳转 
//参数:jmp_buf
//当函数嵌套多层a->b->c->d,从d需要直接返回a时,longjmp可以避免多次返回值 
enum
{
	first,second,third
};
jmp_buf env;
void study(int num2)
{
	if(num2>=10) 
	{
		printf("Good");
		return;
	}
	else
	{
		longjmp(env,1);
	}
}
void deal(int num)
{
	study(num*2);
	return;
}
int main()
{
	int num;
	switch(setjmp(env))
	{
		case first:
			printf("请输入一个数:");
			scanf("%d",&num);
			deal(num);
			break;
		case second:
			printf("游戏结束");
		
	 } 	
}
include <signal.h>
#include <stdio.h>
//信号处理含义
//程序如何发出信号
//如何忽略信号
//如何定制收到信号的处理办法
//有哪些信号
void deal()
{
	
	for(int i=11;i<20;i++)
	{
		printf("%d\n",i);
		if(i==15) raise(SIGINT); 
	}
}
int main()
{
	//raise 发出信号
	//signal(SIGINT,SIG_IGN) //忽略信号,括号前面是忽略的信号,括号后面是SIG_IGN(ignore) 
	signal(SIGINT,SIG_IGN);//定义在函数内部也可以终止其他函数相同的信号,但只能终止出现在定义后的该信号 
	signal(SIGINT,SIG_DFL); //该行代码让信号恢复默认作用 
	deal();
	for(int i=0;i<10;i++)
	{
		printf("%d\n",i);
		if(i==5) raise(SIGINT);//程序自杀,后面整个程序也不会执行 , 
	}  
	printf("hello world"); 
	// 
}
include <stdarg.h>
  //可变参数 
//最熟悉的printf就是可变参数 
#include <stdio.h>
void str(int num,...)
{
	va_list list;
	va_start (list,num);
	for(int i=0;i<num;i++)
	{
		char* res;
		res=va_arg(list,char*);
		printf("%s",res);
	}
	
	
}
int sum(int count,...)//避免了数组的使用 
{
	int res=0;
	
	va_list list;  //list链表用来存储第一个参数的地址,用于后续的偏移 
	va_start(list,count);//取可变参数做准备,将第一个参数地址放入链表里,参数后不可再有其它参数 
	//访问的个数不能超过可变参数的个数   
	for(int i=0;i<count;i++)
	{
		
		res+=va_arg(list,int); //从链表里获取首地址,然后根据第二个参数进行偏移 
	}
	return res;
} 
int main()
{
	str(2,"hello","world");
	printf("%d\n",sum(4,1,2,3,9));
}
include <stddef.h> (学完发现没什么好讲的)
  //常用宏(包括bool宏)
#include <stdio.h>
//#include <stdbool.h>
int main()
{
	printf("%d\n",__LINE__);//被编译文件的行号 
	printf("%s\n",__FILE__);//被编译的文件名 
	printf("%s\n",__DATE__);//编译的日期 
	printf("%s\n",__TIME__);//编译的时间 
	printf("%d\n",__STDC__);//符合C标准,为1 
	printf("%d\n",true);//1为真,0为假 
	printf("%d\n",false);
}
include <stdlib.h>
#include <stdio.h>
//realloc calloc malloc
//非正常终止 abort();
// 执行程序 system
//环境变量 getenv 
void deal()
{
	printf("hello");
}
void with()
{
	printf("world ");
}
int main()
{
	printf("你猜我打印什么\n"); 	
	//atexit() 注册回调函数 参数为函数名,exit终止前(无exit仍然可用)调用这个函数,且可以注册多个 
	//atexit(deal);
	//atexit(with);
	//system("pause");
	//atexit后定义的先执行 
	//正常终止 exit(0);
	//exit(0);
	//system函数,对系统操作台控制,建议在需要某功能的时候查找,指令不区分大小写 
	//system("notepad");
	//ASSOC    显示或修改文件扩展名关联。
	//AT       计划在计算机上运行的命令和程序。
	//ATTRIB   显示或更改文件属性。
	//BREAK    设置或清除扩展式 CTRL+C 检查。
	//CACLS    显示或修改文件的访问控制列表(ACLs)。
	//CALL     从另一个批处理程序调用这一个。
	//CD       显示当前目录的名称或将其更改。
	//CHCP     显示或设置活动代码页数。
	//CHDIR    显示当前目录的名称或将其更改。
	//CHKDSK   检查磁盘并显示状态报告。
	//CHKNTFS  显示或修改启动时间磁盘检查。
	//CLS      清除屏幕。
	//CMD      打开另一个 Windows 命令解释程序窗口。
	//COLOR    设置默认控制台前景和背景颜色。
	//COMP     比较两个或两套文件的内容。
	//COMPACT  显示或更改 NTFS 分区上文件的压缩。
	//CONVERT  将 FAT 卷转换成 NTFS。您不能转换当前驱动器。
	//COPY     将至少一个文件复制到另一个位置。
	//DATE     显示或设置日期。
	//DEL      删除至少一个文件。
	//DIR      显示一个目录中的文件和子目录。
	//DISKCOMP 比较两个软盘的内容。
	//DISKCOPY 将一个软盘的内容复制到另一个软盘。
	//DOSKEY   编辑命令行、调用 Windows 命令并创建宏。
	//ECHO     显示消息,或将命令回显打开或关上。
	//ENDLOCAL 结束批文件中环境更改的本地化。
	//ERASE    删除至少一个文件。
	//EXIT     退出 CMD.EXE 程序(命令解释程序)。
	//FC       比较两个或两套文件,并显示同处。
	//FIND     在文件中搜索文字字符串。
	//FINDSTR  在文件中搜索字符串。
	//FOR      为一套文件中的每个文件运行一个指定的命令
	//FORMAT   格式化磁盘,以便跟 Windows 使用。
	//FTYPE    显示或修改用于文件扩展名关联的文件类型。
	//GOTO     将 Windows 命令解释程序指向批处理程序中某个标明的行。
	//GRAFTABL 启用 Windows 来以图像模式显示扩展字符集。
	//HELP     提供 Windows 命令的帮助信息。
	//IF       执行批处理程序中的条件性处理。
	//LABEL    创建、更改或删除磁盘的卷标。
	//MD       创建目录。
	//MKDIR    创建目录。
	//MODE     配置系统设备。
	//MORE     一次显示一个结果屏幕。
	//MOVE     将文件从一个目录移到另一个目录。
	//NOTEPAD  启用记事本 
	//PATH     显示或设置可执行文件的搜索路径。
	//PAUSE    暂停批文件的处理并显示消息。
	//POPD     还原 PUSHD 保存的当前目录的上一个值。
	//PRINT    打印文本文件。
	//PROMPT   更改 Windows 命令提示符。
	//PUSHD    保存当前目录,然后对其进行更改。
	//RD       删除目录。
	//RECOVER  从有问题的磁盘恢复可读信息。
	//REM      记录批文件或 CONFIG.SYS 中的注释。
	//REN      重命名文件。
	//RENAME   重命名文件。
	//REPLACE  替换文件。
	//RMDIR    删除目录。
	//SET      显示、设置或删除 Windows 环境变量。
	//SETLOCAL 开始批文件中环境更改的本地化。
	//SHIFT    更换批文件中可替换参数的位置。
	//SORT     对输入进行分类。
	//START    启动另一个窗口来运行指定的程序或命令。
	//SUBST    将路径跟一个驱动器号关联。
	//TIME     显示或设置系统时间。
	//TITLE    设置 CMD.EXE 会话的窗口标题。
	//TREE     以图形模式显示驱动器或路径的目录结构。
	//TYPE     显示文本文件的内容。
	//VER      显示 Windows 版本。
	//VERIFY   告诉 Windows 是否验证文件是否已正确写入磁盘。
	//VOL      显示磁盘卷标和序列号。
	//XCOPY    复制文件和目录树。
	//COLOR [attar]
	//   attar     指定控制台输出的颜色属性
	//颜色属性由两个十六进制的数字指定 -- 第一个为背景,第二个为前景(字体)。每个数字可以为以下任何值之一:
	//     0 = 黑色           8 = 灰色
	//     1 = 蓝色           9 = 淡蓝色
	//     2 = 绿色           A = 淡绿色
	//     3 = 浅绿色         B = 淡浅绿色
	//     4 = 红色           C = 淡红色
	//     5 = 紫色           D = 淡紫色
	//     6 = 黄色           E = 淡黄色
	//     7 = 白色           F = 亮白色
	printf(getenv("PATH")); 
	//getenv()参数是一个字符型指针,返回一个字符型指针
	//环境变量具体值在“我的电脑”属性里面,有待学习 
	 
}
这些知识都是入门级别,这里算是开个头,以后有待进一步学习

                
            
        
浙公网安备 33010602011771号