永发信息网

有关C的两个问题

答案:2  悬赏:50  手机版
解决时间 2021-05-04 18:59
  • 提问者网友:回忆在搜索
  • 2021-05-03 19:11

1.关于理解复杂声明的

头文件signal.h里的signal函数的声明

void ( * signal ( int , void ( * ) ( int ) ) ) ( int );

请给我详细解释一下。。

* signal ( int , void ( * ) ( int ) ) 这部分是说明变量的类型为什么该种类型的函数指针,既然说明了这个函数有这两个参数 ( int , void ( * ) ( int ) ) ,为什么最后的参数表里面只有一个 int 类型的参数啊?

2.关于预处理命令 #define

一般有两种使用方法

(1) 简单的宏定义:
#define <宏名>  <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define A(x) x

但是我看了一个一些头文件里面出现了

比如这样的 #define _INC_SIGNAL

为什么只有宏名,请问这个用法是什么意思?

最佳答案
  • 五星知识达人网友:醉吻情书
  • 2021-05-03 19:35
1
signal函数 有两个参数 是 int 和 一个指向函数的指针 ,这个函数 有一个int 参数,返回 void.
而这个 signal 有一个返回值是指向函数的指针,这个函数 有一个int 参数,返回为void
2
只有宏名 意思就是仅仅是定义了这个宏
这种宏广泛用在防止头文件被重复包含中
全部回答
  • 1楼网友:等灯
  • 2021-05-03 20:44

1.关于指针和函数指针

int * a: a is a pointer to int; int (*a)[10]: a is a pointer to an array[10] of int int (*a)(int): a is a pointer to a funciont(int) returning int

signal函数原型: void (*signal(int signo,void (*func)(int)))(int); 其第二个参数func是一个void型函数指针(该函数参数为int),并且返回一个void型函数指针(该函数参数为int),简化这个定义, 可以typedef void Sigfunc(int); 然后signal函数原形写为 Sigfunc* signal(int,Sigfunc*); 2.关于只有宏名的宏定义,在编译时被替换成空字串,也就是去掉该修饰的作用。在跨平台代码环境中和调试版程序release版中的测试代码中较为常见

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯