gpt4 book ai didi

Clang-Tidy:根据未初始化的非局部变量、C 指针引用,使用非常量表达式初始化非局部变量

转载 作者:行者123 更新时间:2023-12-05 05:59:24 27 4
gpt4 key购买 nike

我们有一段非常简单的代码,它会发出警告,但看起来应该没问题,并且运行良好。我们知道通常编译单元之间的初始化顺序可能存在问题,但在这种情况下我们使用指针进行初始化,因此不理解顺序如何导致问题,或者这段代码可能会出现什么问题。请注意,在实际代码中,我们有更复杂的结构场景,但下面的代码显示了基本问题。

编辑:删除了 const 限定符,因为它们不影响警告

文件1.c

int foo=42;

文件2.c

#include <stdio.h>

extern int foo;
// Clang-Tidy: Initializing non-local variable with non-const expression depending on uninitialized non-local variable 'foo'
int *bar=&foo;

int main() {
printf("%d\n", *bar); // prints '42'
}

警告不是来自 gcc,而是来自 clang-tidy。重现运行:

clang-tidy -checks=* file1.c file2.c

最佳答案

clang-tidy 警告一些不是问题的事情:foo 是否初始化在这个初始化器中没有区别,只有它的地址是拍摄。

此外,foo 是一个全局变量,因此它要么在定义它的模块中静态初始化,要么没有初始化器,在运行时由加载程序初始化为 0。如果程序被编译为 C++,foo 可能会在运行时初始化,在 main 被调用之前,可能是通过运行初始化代码,但这同样没有区别,因为它的地址用于 int *bar = &foo;

Cameron Tacklind 所述,您应该禁用此警告。

关于Clang-Tidy:根据未初始化的非局部变量、C 指针引用,使用非常量表达式初始化非局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68175261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com