C++ 中PASCAL是什么意思
如下:
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
如果把PASCAL去掉,就成为
CObject* (* m_pfnCreateObject)(); // NULL => abstract class
函数指针,指针指向一个参数为空返回值类型为CObject*的函数。
但是加上PASCAL后是什么意思,查了一下,说PASCAL是函数调用约定,说是参数从右往左压栈方式,函数退出时清空堆栈。
“参数从右往左压栈方式,函数退出时清空堆栈。”是什么意思,要是不用PASCAL可不可以,如果不可以,那么不用的话会有什么后果?
[解决办法]
貌似Pascal是从左到右依次入栈吧...
这个说法其实是说的编译器执行的动作, 写汇编代码的时候可以看出来函数的参数是如何PUSH到堆栈里面去的, C++程序员只需要知道这回事就好了.
[解决办法]
关键是你调用的时候得一致
你自己写的函数考虑符号/性能自行决定约定
[解决办法]
调用点的声明和函数的定义需要一致, 否则调用传参与函数定义期待的传参方式不同将出问题.