程序段

SFINEA in C++

青春壹個敷衍的年華 提交于 2020-04-06 02:44:01
SFINEA in C++ 作者:唐风 出处: http://www.cnblogs.com/liyiwen 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 SFINAE(substitution failure is not a error) 主要用于模板函数,它是指,编译器在使用具体类型来替换模板类型参数,对模板进行实例化(展开模板)时,如果发生替换失败,那么并不会直接引发编译错误(Error),而只是简单地把这个模板从重载候选者中去除掉。 还是看看代码吧(一个在SFINAE中常遇到的例子): 代码段1: template <typename T> bool is_class(int T::*) { return true; } template <typename T> bool is_class(...) { return false; } struct Test { }; int main(void) { std::cout<<is_class<Test>(0)<<endl; std::cout<<is_class<int>(0)<<endl; } 运行的结果是输出: 1 0 这表明,如果传给 is_class 的模板参数是一个类,那么返回 true 的那个版本就会被选中

操作系统第二章笔记

社会主义新天地 提交于 2020-03-10 06:23:36
进程的描述与控制 2.1 前趋图和程序执行 前趋图:有限无循环图,可记为DAG,它用于描述进程之间执行的先后顺序。途中的每个节点可用来表示程序或程序段,乃至一条语句,节点间的邮箱变啧表示两个节点之间存在的偏序或前趋关系。 初始节点:没有前驱的结点 终止节点:没有后继的结点 每个节点具有一个重量,用于表示该结点所含有的程序量或程序的执行时间。 注意:前趋图中是不允许有循环的 程序的顺序执行: 即使是一个程序段,也可能存在执行顺序问题 程序的顺序执行的特征: 1.每一个操作必须在下一个操作开始之前结束 2.程序执行过程中,其执行结果不受外界因素影响 程序并发执行 因为系统资源的利用率很低,所以引入多到程序技术,是程序或者程序段能并发执行,只有在不存在前去关系的程序之间才有可能并发执行 2.2进程的描述 为了使参与并发执行的每个程序都能独立的运行,在操作系统中必须为之配置一个专门的数据结构,进程控制块(PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程,由程序段、相关的数据段和PCB三部分便构成了进程实体 进程的特征 (1)动态性:进程的实质是进程实体的执行过程 (2)并发性 (3)独立性 (4)异步性 进程的三种基本状态: (1)就绪状态 (2)执行状态 (3)阻塞状 PCB的作用是使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位 (1

009 预处理 #pragma once; typedef; #ifdef

╄→尐↘猪︶ㄣ 提交于 2020-02-29 16:48:39
/* 目录: 一 #pragma once 二 typedef 三 #ifdef */ 一 #pragma once 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式 二 typedef // 给类型/结构取别名 #include "stdafx.h" typedef char * PCHAR; int main(int argc, char *argv[]) { char szStr[20] = "test"; PCHAR pStr = szStr; printf("%c", *pStr); return 0; } // 系统编写 - minwindef.h typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef FLOAT *PFLOAT; typedef BOOL near *PBOOL; typedef BOOL far *LPBOOL; typedef BYTE near *PBYTE; typedef BYTE far *LPBYTE; typedef int near *PINT;

编译预处理命令define

自闭症网瘾萝莉.ら 提交于 2020-02-26 12:42:39
#include 包含指令 将一个源文件嵌入到当前源文件中该点处。 #include<文件名> 按标准方式搜索,文件位于C++系统目录的include子目录下 #include"文件名" 首先在当前目录中搜索,若没有,再按标准方式搜索。 #define 宏定义指令 定义符号常量,很多情况下已被const定义语句取代。 定义带参数宏,已被内联函数取代。 #undef 删除由#define定义的宏,使之不再起作用。 1 #define PI 3.14 2 #undef //取消之前已有的宏定义 条件编译指令 #if 和 #endif #if 常量表达式 //当“ 常量表达式”非零时编译 程序正文 #endif ...... 1 #if 0 //如果将0改为1表示要编译 2 ------------- 3 ------ 4 不编译 5 ---------- 6 #endif 条件编译指令 ——#else #if 常量表达式 //当“ 常量表达式”非零时编译 程序正文 #else //当“ 常量表达式”为零时编译 程序正文2 #endif #if !strcmp(char *a,char *b) //如果为真则编译,否则编译else #else #endif 条件编译指令 ——#elif #if 常量表达式1 程序正文1 //当“ 常量表达式1”非零时编译 #elif 常量表达式2

第12章 学习shell脚本

风格不统一 提交于 2020-02-24 12:52:40
12.1 什么是shell脚本 就字面上的意思,即针对shell所写的剧本,shell脚本是利用shell的功能所写的一个程序,这个程序使用纯文本文件,将一些shell的语法和命令(也可以是外部命令)写在里面,还能搭配正则表达式、管道命令和数据流重定向等功能,以达到我们需要的处理目的,执行一个“shell脚本”文件,就能一次执行多个命令,shell脚本还提供数组、循环、条件与逻辑判断等功能,用户可以直接用shell来编写程序,而不必使用类似C语言等传统程序语言来编写,shell脚本可以简单地被看成是批处理文件,也可以被说成是程序语言,且由于这个程序语言都是利用shell与相关工具命令,所以不需要编译即可执行 1学习shell脚本的作用 自动化管理:管理一台主机每天要进行的任务有查询日志文件、跟踪流量、监控用户使用主机状态、主机各项硬件设备状态、主机软件更新查询等,你可以每天手动处理这些事情,也可以写个简单的shell脚本,让它来帮你处理每天的任务 帮助管理系统:CentOS6.x以前的版本中系统服务启动的接口是在/etc/init.d/这个目录下,这个目录下所有文件都是脚本文件,另外,包括启动过程也要利用shell脚本来帮忙查询系统的相关设置参数,然后再代入各个服务中,从CentOS7开始,/etc/init.d/这个脚本启动的方式由systemd所替代

Verilog笔记.1.基本语法

*爱你&永不变心* 提交于 2020-02-19 08:32:42
0. 前 抽象模型分级: • 系统级(system):用高级语言结构实现设计模块的外部性能的模型。 • 算法级(algorithm):用高级语言结构实现设计算法的模型。 • RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。 • 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。 • 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。 1.最基本的数据类型 reg型、wire型、integer型、parameter型 在数字电路中, x代表不定值,z代表高阻值 。 一个数字可以被定义为 负数, 只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。 在一个模块中改变另一个模块的参数时,需要使用defparam命令。 wire型 数据常用来表示用于以 assign 关键字指定的组合逻辑信号。 reg型 数据常用来表示用于 “always”模块 内的指定信号,常代表触发器。 reg型数据的缺省初始值是 不定值 。 memory型 数据是通过 扩展reg型 数据的地址范围来生成的。举例说明:   reg [n-1:0] mema[m-1:0]; 这个例子定义了一个名为mema的存储器,该存储器有m个n位的存储器。 注意

C语言的编译预处理

本秂侑毒 提交于 2020-02-17 09:27:42
C语言的编译预处理命令主要包括:宏定义、文件包含和条件编译。预处理命令均以“#”开始,命令的结尾没有分号,每条预处理命令必须占用单独一行。 1.宏定义 (1) 无参宏定义 无参宏定义的一般形式如下: #define 宏名 字符序列 如果源程序中使用了宏定义,编译预处理过程中,自动把源程序中出现的所有“宏名”替换为“字符序列”,这是一个纯文本替换,也称为宏替换。 例如下面定义了3个无参宏名: #define PI 3.14 #define R 10 #define AREA PI R R (2) 有参宏定义 有参宏定义的一般形式如下: #define 宏名(参数表) 字符序列 有参宏定义在进行宏替换时,源程序出现宏名的地方都使用字符序列替换,替换时使用宏引用中的实参去替换宏定义中的形参。 例如,如下定义了一个有参的宏名。 #define MUL(a,b) (a)*(b) 源程序中可以使用如下语句使用有参的宏: int x=3, y=4, z; z=MUL(x,y); 注意:通常需要在有参宏定义时,字符序列中参数要加上圆括号,以免进行宏替换时出现错误,如z=MUL(x+3,y-1) 10,进行宏替换后的语句为:z=x+3 y-1*10;。 2、文件包含 文件包含也是一种编译预处理命令,其作用是把被包含的文件的内容全部引入到使用文件包含命令的源程序文件中。文件包含命令有以下2种形式:

#ifndef#define#endif的用法

自古美人都是妖i 提交于 2020-01-26 20:53:31
#ifndef 标示1 //判断"标示1"是否定义,如果被定义则返回假, 如果没有被定义则返回真 。   /**********************************/   语句1 #ifndef 标示1     语句2 #define 标示1   语句3 #endif   语句4 ……   语句5 …… 该段代码意思是: 如果标示1没有被定义,则重定义标示1,即执行语句2、语句3、语句4、……; 如果标示1已经被定义,则直接跳过语句2、语句3,直接执行语句4、语句5、…… 备注:#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。   千万不要忽略了头文件中的#ifndef,这是一个很关键的东西。比如 你有两个C文件,这两个C文件都include了同一个头文件 。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。   还是把头文件的内容都放在#ifndef和#endif中吧。 不管你的头文件会不会被多个文件引用,你都要加上这个。 一般格式是这样的:   #ifndef <标识>     #define <标识>     ......     ......   #endif   <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线

预处理——条件编译

点点圈 提交于 2020-01-12 03:51:54
条件编译:预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 条件编译有三种形式:#ifdef 、#ifndef 、#if (1)#ifdef #ifdef 标识符 程序段1 #else 程序段2 #endif 或者 #ifdef 标识符 程序段 #endif (2)#ifndef #ifndef 标识符 程序段 1 #else 程序段2 #endif 或者 #ifndef 标识符 程序段 #endif (3)#if #if 常量表达式 程序段 1 #else 程序段2 #endif 或者 #if 常量表达式 程序段 #endif 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/103933303

#ifdef,#else,#endif,#if 拾忆

最后都变了- 提交于 2020-01-10 04:01:39
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况: 1:情况1: #ifdef _XXXX ...程序段1... #else ...程序段2... #endif 这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。 例: #define NUM ............. ............. ............. #ifdef NUM printf("之前NUM有过定义啦!:) \n"); #else printf("之前NUM没有过定义!:( \n"); #endif } 如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 2:情况2: #ifndef _XXXX ...程序段1... #else