什么是函数签名

ghy_study 2008-02-26 10:45:11
今天阅读《深入解析MFC》一书时看到这样一段:
MFC用消息映射的方法处理消息,消息映射的依据是消息映射表,在构建消息映射表的过程中要用到一个结构体:
struct AFX_MESSAGE_MAP
{
...
UINT nSig; //函数签名
...
};

我的问题是:

1、什么是函数签名?

2、这个被注释为“函数签名”的成员变量有什么用?
...全文
2722 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pk44pk 2011-08-27
  • 打赏
  • 举报
回复
7楼说的对,函数返回值类型不属于函数签名.
hanyingmenghuan 2011-05-06
  • 打赏
  • 举报
回复
学习了哦
SunCd3210oqq 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liuzhenpolestar 的回复:]

把函数名字去掉以后剩下的东西 即返回值、参数个数、参数类型
[/Quote]

不同意,函数签名不包括返回值(类型),而是参数类型,参数个数,参数顺序。
liuzhenpolestar 2009-11-18
  • 打赏
  • 举报
回复
把函数名字去掉以后剩下的东西 即返回值、参数个数、参数类型
liuzhenpolestar 2009-11-18
  • 打赏
  • 举报
回复
把函数名字去掉以后剩下的东西 即返回值、参数个数、参数类型
aa3000 2008-02-28
  • 打赏
  • 举报
回复
区别是哪种宏定义的消息映射,具体看一下 _AfxDispatchCmdMsg 这个函数就知道了。
长尾巴的悟空 2008-02-28
  • 打赏
  • 举报
回复
书看久了就会了.
sxd269 2008-02-28
  • 打赏
  • 举报
回复
1、函数签名,如楼上说所,就是标志不同函数了
2、mfc注释的函数签名,标志mfc不同动作,执行不同函数,先是存在AFX_MESSAGE_MAP类型的一个数组,消息产生时,根据nsig,dipatcher到不同类型函数

fangxu1999 2008-02-28
  • 打赏
  • 举报
回复
函数签名就是函数的声明信息,包括参数、返回值、调用约定之类。例如:void fun1(); int fun2(char);就是两个不同的函数。
nSig主要是用来标示不同类型函数的。由于MFC内部消息映射就是当发生特定的消息时,调用指定的函数。但是各种消息除了消息名之外,有的可能还要有入口参数,通过WPARAM和LPARAM传进来的,经过内部解释之后,转换成相应的值送到消息相应函数中去。
例如:WM_LBUTTONDOWN绑定了void OnLButtonDown(UINT,CPoint);
WM_CHAR绑定了void OnChar(UINT,UINT,UINT);
如果我们根据消息名称而找到相应的映射表项,直接通过其中的pfn函数指针来调用,怎么知道该传两个参数还是三个参数呢?该怎么使用pfn(?)
所以通过nSig来标示,实现一个判断
switch(nSig)
{
case AfxSig_xx1: pfn(arg1, arg2);
case AfxSig_xx2: pfn(arg1, arg2, arg3);
}
当然,在MFC的源代码中也不是简单直接这样调用的,具体情况可以跟踪代码看看:)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧