输入参数一处隐藏错误,致命错误
大部分函数的参数都是用于输入
但,也存在用于输出
比如说:
bool AddFun(int nItem, int &nRet);
像第二个参数 nRet是可以用于输出,当然也可以做输入
由于C语言限制,C语言里要这样写:
bool AddFun(int nItem, int *nRet);
写法不一样,功能是一样的。
这里会存在问题的,而且是致命的,所以使用的时候要注意!
例如:
函数
bool AddFun(int32_t dwID, int32_t *dwNameID)
{
....
....
*dwNameID = 8; //随便举个例子,就是说这个参数被改变了(重新赋值)
....
}
实际调用的地方:
static int16_t wTestFlag = 34;
static int16_t wNameID = 0;
AddFun(123456, &wNameID);
////补充 int16_t 表示2字节的整形,int32_t 表示4字节的整形
////不知道有没有发现问题?
是的,这样写编译没有问题,结果也未必会有错误的影响。
注意:
输入源:wNameID 是一个 2字节整形,AddFun 的参数是4字节的,
如果调用 AddFun,那么 会从 &wNameID 地址开始 连续 取4个字节
而AddFun 会对这个地址进行赋值操作,这样原先2字节的前面两个字节会因为重新赋值而变成0,
这样就会出现奇怪的问题,临近的变量 莫名的被改掉,很危险。
所以,如果作为输出用的参数,就不要强制转换了,当然也包括各种结构体,类等参数
    满屏源代码,一把辐射泪,都云编程痴,谁解其中味!
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号