可读性很强的C语言的函数指针定义
通常C/C++程序里面要用到大量的指针,其语法非常难以阅读。比如下面的vp指针类型:
#include <iostream>
using namespace std;
typedef void (*vp) (float&,float&);
void foo(float &a,float &b)
{
a = a + b;
}
int main()
{
//
float a=1;
float b=2;
vp t=&foo;
t(a,b);
cout << a << endl;
cout << "Hello World!" << endl;
return 0;
}
下面我们就用C自己的宏定义功能,实现其他声明的可读性加强。
====================================================================
#include <iostream>
using namespace std;
#define DEFINE_FUNCTIONP(POINTER_NAME,RESULT_TYPE,...)\
typedef RESULT_TYPE (* POINTER_NAME) (__VA_ARGS__);
DEFINE_FUNCTIONP(vp,void,float&,float&)
//typedef void (*vp) (float&,float&);
//invalid conversion from void(*) (int,int) to vp {aka void(*) (...)} -fpermissive
//void foo(int a,int b)
void foo(float &a,float &b)
{
a = a + b;
}
int main()
{
//
float a=1;
float b=2;
vp t=&foo;
t(a,b);
cout << a << endl;
cout << "Hello World!" << endl;
return 0;
}
使用环境:
qt 5.2.1
gcc 4.8
可读性很强的C语言的函数指针定义的更多相关文章
- c语言之函数指针应用
c语言之函数指针应用 1.函数指针与指针函数 在开始运用函数指针前,我们需要将两个概念即:函数指针与指针函数搞清楚. 函数指针,指明这个一个函数,但返回值为指针类型,语法格式为: 类型名* 函数名A( ...
- C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏
函数指针:指向函数的指针变量. 函数名相当于首地址. 函数指针定义:返回值类型 (*函数指针变量名)(参数类型1,参数类型2,....)=初始值 函数指针类型:返回值类型 (*)(参数类型1,参数 ...
- c语言之函数指针
一.基础研究 这里研究的内容是函数指针,需要我们在研究后构造程序来描述函数指针数组的用法和向函数传函数指针的方法. 指针有很多种:整型指针.结构体指针.数组指针等等,它们的本质是它们的值都是一个地址, ...
- 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)
1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表) 例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...
- C语言的函数指针数组(好绕啊~看完这篇估计就通关了)
转自https://www.cnblogs.com/chr-wonder/p/5168858.html int *(*p(int))[3] 今天有人问这个是啥?我一看直接就懵逼了…… 下面做一些简单的 ...
- C语言之函数指针、回调函数的使用
一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...
- c语言的函数指针和函数指针数组的简单demo
今天,简单记录一下,函数指针和函数指针数组的使用,废话不多说,直接贴上代码,里面有详细的注释,方便以后查阅. #include <cstdio> #include <Windows. ...
- Python语言程序设计---函数的定义与使用
推荐一个Python学习交流的q群:610380249 在学习Python的过程中,有什么不懂的问题都可以发群里,一起讨论. 1 函数的理解和定义 函数是一段代码的表示,所指定的参数是一种占位符,如果 ...
- c语言的函数指针
简单定义并间接调用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> void singas ...
随机推荐
- html----h1-6标签
Html的标题标签h1-h6种选择,从大到小:默认上下margin一样,靠左,不好改变:能用定位改变. 1.<h1></h1> display:block; font-size ...
- ubuntu18换国内源
编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前请做好相应备份): ##中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ ...
- mongodb 副本集部署
1.安装三节点linux环境:196.168.1.111,196.168.1.112,192.168.1.113(三节点可彼此ping通) 2.三节点安装mongodb,参考https://blog. ...
- linux 根据服务名称批量杀死进程
ps -ef |grep python |awk '{print $2}'|xargs kill -9
- JMeter学习(十八)JMeter处理Cookie与Session(转载)
转载自 http://www.cnblogs.com/yangxia-test 有些网站保存信息是使用Cookie,有些则是使用Session.对于这两种方式,JMeter都给予一定的支持. 1.Co ...
- java搭建web从0-1(第一步:创建web工程)
intellij idea版本:2017 1.新建一个web工程 使用工具intellij ideal,注意:只有Ultimate版本的可以新建web工程,社区版本的不支持新建web工程 File ...
- 【Scheme】cons的过程性实现
(define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y))) dispatch) (define (car z) (z ...
- python--第六天总结
执行系统命令 可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen* --废弃 popen2.* --废弃 co ...
- centos 6.9 +nginx 配置GIT HTTPS服务器(证书采用自签名)
第一部分原通过SSH访问的GIT服务器迁移 1.把原服务器GIT资源库目录完成复制至新的服务器 2.安装GIT服务器 新的服务器 创建用户 useradd git password git 下载GIT ...
- 在timer的时候突然改变影片简介,先前的不暂停
import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; var hinder ...