C++模板、预处理、信号处理
2017-11-30 00:13
225 查看
http://www.runoob.com/cplusplus/cpp-templates.html
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。
模板函数
形式如下:
在这里,type 是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。
类模板
形式如下
在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。您可以使用一个逗号分隔的列表来定义多个泛型数据类型。
C++预处理
http://www.runoob.com/cplusplus/cpp-preprocessor.html
预处理是一些指令,指示编译器在实际编译前所需完成的预处理
#define预处理
用于创建符号常量。该符号常量通称为宏,指令一般形式:
#define macro-name replacement-text
参数宏
#define MIN(a,b) (a
# 和 ## 运算符
# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。
## 运算符用于连接两个令牌
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。
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。
模板函数
形式如下:
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。
相关文章推荐
- C++ 知识点(完):高级编程:模板,预处理器,信号处理,多线程,Web编程
- C++ 知识点(完):高级编程:模板,预处理器,信号处理,多线程,Web编程
- 图像处理中的模板匹配c++实现
- C++ 信号处理
- C++数学、信号处理相关库
- C/C++ signal 信号处理函数
- [置顶] C++(函数模板的覆盖 包括:处理私有类的函数模板覆盖)
- c++之信号处理
- C/C++编译预处理:宏定义指令、文件包含指令、条件编译指令和特殊符号处理
- Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出
- Linux下,使用C/C++编写的一个简单的信号处理例程
- C++重复模板实例的处理
- linux下c/c++实例之四父检测子进程和信号处理
- 雅阁错题笔记之c++模板|预处理命令1
- C++ 信号处理
- C++ - 模板类使用成员函数模板(member function template)处理隐式(implicit)转换
- C++ 信号处理
- C++ 信号处理
- C++ 编译器处理模板的原理
- C++ signal和sigaction信号处理