Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正确检查Objective-C中是否存在C功能_Ios_C - Fatal编程技术网

Ios 正确检查Objective-C中是否存在C功能

Ios 正确检查Objective-C中是否存在C功能,ios,c,Ios,C,在运行时检查C函数是否存在的正确方法是什么 说明应该使用if(myweakinkedFunction!=NULL)检查此问题,但说明应该使用if(&UIApplicationOpenSettingsURLString==NULL){ 我当前需要这个用于SecAddSharedWebCredential和UIApplicationOpenSettingsURLString 在部署目标为iOS 7.0的情况下,无论是否添加&,它都不会对第一个函数或第二个函数发出警告 在部署目标为iOS 8.0且两者

在运行时检查C函数是否存在的正确方法是什么

说明应该使用
if(myweakinkedFunction!=NULL)
检查此问题,但说明应该使用
if(&UIApplicationOpenSettingsURLString==NULL){

我当前需要这个用于
SecAddSharedWebCredential
UIApplicationOpenSettingsURLString

在部署目标为iOS 7.0的情况下,无论是否添加
&
,它都不会对第一个函数或第二个函数发出警告

在部署目标为iOS 8.0且两者都添加了
&
的情况下,
UIApplicationOpenSettingsURLString
抛出警告:

“UIApplicationOpenSettingsURLString”的地址与空指针的比较始终为真

从两个功能检查中删除
&
SecAddSharedWebCredential
将抛出警告:

函数“SecAddSharedWebCredential”不等于空指针的比较始终为真


如果从iOS 8.0开始,两个都可用,为什么不都抛出相同的警告?忽略警告,检查这一点的正确方法是什么?

只有当部署目标小于8.0时,才需要检查NULL,否则它不是NULL-这就是警告的状态。这两个警告都是在iOS 8.0中添加的,因此如果部署目标是iOS 8.0及更高版本,您无需检查NULL。

对于函数,
&
是可选的。对于其他类型,如字典键,则是必需的

这是因为在表达式中使用函数符号会自动转换为指向该函数的指针。请尝试阅读问题的答案

也许一个例子可以说明这一点:

extern int functionA(void);
extern NSString * const valueA;

// ...
printf("%p <-  functionA\n", functionA);
printf("%p <- &functionA\n", &functionA);
printf("%p <-  valueA\n", valueA);
printf("%p <- &valueA\n", &valueA);
extern-int函数(void);
外部NSString*常量值a;
// ...

printf(“%p”以及检查此项的正确方法是什么?“有或没有
&
?“如果两个都在iOS 8.0之后可用,为什么不发出相同的警告?”是的,我现在注意到我将函数与其他类型混合在一起,并认为它们是相同的。
0x1089a8f00 <-  functionA
0x1089a8f00 <- &functionA
0x1089a9018 <-  valueA
0x1089a9040 <- &valueA