您的位置:首页 > 编程语言 > C语言/C++

C++模板、预处理、信号处理

2017-11-30 00:13 225 查看
http://www.runoob.com/cplusplus/cpp-templates.html

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。

模板函数

形式如下:

template <class type>
ret-type func-name(parameter list)
{
// 函数的主体
}


在这里,type 是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。

类模板

形式如下

template <class type>
class class-name {
.
.
.
}


在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。您可以使用一个逗号分隔的列表来定义多个泛型数据类型。

C++预处理

http://www.runoob.com/cplusplus/cpp-preprocessor.html

预处理是一些指令,指示编译器在实际编译前所需完成的预处理

#define预处理

用于创建符号常量。该符号常量通称为宏,指令一般形式:

#define macro-name replacement-text

参数宏

#define MIN(a,b) (a

#ifndef NULL
#define NULL 0
#endif

#ifdef DEBUG
cerr <<"Variable x = " << x << endl;
#endif

#if 0
不进行编译的代码
#endif


# 和 ## 运算符

# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。

#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main ()
{
cout << MKSTR(HELLO C++) << endl;

return 0;
}


## 运算符用于连接两个令牌

#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main()
{
int xy = 100;

cout << concat(x, y);
return 0;
}


C++中预定义宏

LINE:当前行

FILE:当前文件名

DATE:当前日期

TIME:当前时间

C++信号处理

信号是由操作系统传给进程的中断,会提早终止一个程序。

有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 中。

SIGABRT:程序异常终止

SIGFPE:错误的算数预算

SIGILL:检测非法指令

SIGINT:接收到交互注意信号

SIGSEGV:非法访问内存

SIGTERM:发送到程序的终止请求

signal()函数

C++信号处理库提供了signal函数,用来捕获突发事件,语法如下:void (*signal (int sig, void (*func)(int)))(int);

这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;第二个参数是一个指向信号处理函数的指针。

raise()函数

生成信号,带有一个整数信号编号作为参数:int raise (signal sig);

在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: