gub*_*bby 4 c function-pointers c89
我有以下代码:
long fp = ...
void (*ptr)(long, char*, char*) = fp;
Run Code Online (Sandbox Code Playgroud)
long fp是一个正确的函数指针,它以长整数形式出现.我正在获得标准"从没有强制转换的int生成指针"警告.我希望能够编译:
-std=iso9899:1990 -pedantic-errors
Run Code Online (Sandbox Code Playgroud)
这会将警告变成错误.问题是:什么是正确的演员?我尝试了各种猜测,例如:
void (*ptr)(long, char*, char*) = (void)(*)(long, char*, char*) fp;
Run Code Online (Sandbox Code Playgroud)
但似乎无法找到合适的人选.
"正确"的演员是:
void (*ptr)(long, char*, char*) = (void (*)(long, char*, char*))fp;
Run Code Online (Sandbox Code Playgroud)
显然,这可以用合适的typedef来整理.
但无论哪种方式,其结果都是实现定义的.如果可以,请避免这种情况,并将指针保持在指针类型中.接下来最好的事情是使用intptr_t它是否可用.
可能它是这样的:
void (* ptr)(long, char, char *) = (void (*)(long, char, char *))fp;
Run Code Online (Sandbox Code Playgroud)
但我的建议是使用a typedef而忘记所有这些混乱:
typedef void (* fnPtr)(long, char, char*);
fnPtr ptr = (fnPtr) fp;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |