Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Objective c 为什么可以';t gcc或clang是否正确@encode SIMD矢量类型?_Objective C_Vector_Clang_Simd_Objective C Runtime - Fatal编程技术网

Objective c 为什么可以';t gcc或clang是否正确@encode SIMD矢量类型?

Objective c 为什么可以';t gcc或clang是否正确@encode SIMD矢量类型?,objective-c,vector,clang,simd,objective-c-runtime,Objective C,Vector,Clang,Simd,Objective C Runtime,在处理向量类型和ObjC运行时时,我遇到了一个非常复杂的问题 据我所知,clang或GCC都不会为任何SIMD向量类型提供“正确”的类型编码 #import <Foundation/Foundation.h> int main() { typedef int int4 __attribute__((vector_size(16))); typedef float float4 __attribute__((vector_size(16))); NSLog(

在处理向量类型和ObjC运行时时,我遇到了一个非常复杂的问题

据我所知,clang或GCC都不会为任何SIMD向量类型提供“正确”的类型编码

#import <Foundation/Foundation.h>

int main() {
    typedef int int4 __attribute__((vector_size(16)));
    typedef float float4 __attribute__((vector_size(16)));

    NSLog(@"Int4: %s", @encode(int4));
    NSLog(@"Float4: %s", @encode(float4));
}
我只得到字符串
@:
,这会导致
NSMethodSignature
NSInvocation
基本上弄脏他们的裤子,并导致他们的错误

我是否可以启用一些编译器选项来恢复向量类型的正确编码?或者这里唯一的解决方案是“不从ObjC方法返回向量”


注意:返回(或传递)指向向量的指针也没有帮助,因为指向向量的指针的编码只是
^
,然后会贪婪地匹配列表中的下一个参数,导致我的参数计数再次关闭。我想我可以将向量转换为一个
无效*
,但这确实是一个丑陋的攻击。

看起来这是一个已知的问题,在这种情况下,clang显然被修改为显示警告:

2014-04-09 06:21:01.102 test[1707:507] Int4: 2014-04-09 06:21:01.103 test[1707:507] Float4: 2014-04-09 06:21:01.102 test[1707:507] Int4: ![16,16i] 2014-04-09 06:21:01.103 test[1707:507] Float4: ![16,16f]
-(int4) foo;