为什么将变量强制转换为void ?

Why cast used variable to void

本文关键字:void 转换 变量 为什么      更新时间:2023-10-16

我目前正在查看FAST的OpenCV实现,偶然发现了一些被转换为void的变量。我理解这是用来沉默lint/编译器警告,当一个变量不使用。但是在这个例子中使用了变量。它可能与SSE有关,因为它只发生在这些代码部分。

#if CV_SSE2
    __m128i delta = _mm_set1_epi8(-128), t = _mm_set1_epi8((char)threshold), K16 = _mm_set1_epi8((char)K);
    (void)K16;
    (void)delta;
    (void)t;
#endif

以后的用法(edit):

#if CV_SSE2
...
__m128i v1 = _mm_xor_si128(_mm_subs_epu8(v0, t), delta);
...
int m = _mm_movemask_epi8(_mm_cmpgt_epi8(max0, K16));
...
#endif

参见:OpenCV-Repository中的full fast.cpp(我粘贴的代码是从第71行开始)

那么,它对什么有好处,为什么只对SSE相关的变量有好处?

如果你看一下这些行的责备,它们是在这个提交中添加的,并且提交消息"warnings under windows"。

您可以询问提交者,https://github.com/CheeseWiz,但我怀疑它只是归结为MSVC中的一个bug。

虽然它依赖于编译器,但它通常用于抑制"未使用的变量"消息。

我更喜欢UNUSED(var)宏,因为它清楚地显示了意图,并且可以针对各种编译器环境进行定制。