【发布时间】:2020-03-06 12:45:29
【问题描述】:
我遇到了 uninitialized_var() 宏的多种用途,旨在消除以下警告:
warning: ‘ptr’ is used uninitialized in this function [-Wuninitialized]
对于 GCC (<linux/compiler-gcc.h>),它是这样定义的:
/*
* A trick to suppress uninitialized variable warning without generating any
* code
*/
#define uninitialized_var(x) x = x
但我也发现<linux/compiler-clang.h> 以不同的方式定义了相同的宏:
#define uninitialized_var(x) x = *(&(x))
为什么我们有两种不同的定义?出于什么原因,第一种方法可能不够?第一种方法是否仅适用于 Clang 或其他一些情况?
c 示例:
#define uninitialized_var(x) x = x
struct some {
int a;
char b;
};
int main(void) {
struct some *ptr;
struct some *uninitialized_var(ptr2);
if (1)
printf("%d %d\n", ptr->a, ptr2->a); // warning about ptr, not ptr2
}
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c c gcc linux-kernel initialization clang