gpt4 book ai didi

c - C 程序中的共享常量

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:47 32 4
gpt4 key购买 nike

我有一个头文件,我们称它为 foo.h。在 foo.h 中,我有以下代码。

extern const size_t video_column_size;

在另一个文件中,我们先将其命名为.c,我有以下代码。

#include "foo.h"
video_column_size = 4;

我的目标是让这个值成为一个单一的常量变量,它将在包含 foo.h header 的所有类之间共享。

当我编译和链接时,出现以下错误。

warning: data definition has no type or storage class
warning: type defaults to 'int' in declaration of 'video_column_size' [-Wimplicit-int]
conflicting type qualifiers for 'video_column_size'
note: previous declaration of 'video_column_size' was here:
extern const size_t video_column_size;

据我了解,发生这种情况的原因是因为 C 在没有类型声明时默认为 int 类型。但是,我假设变量的定义将从头文件中继承。我哪里错了?

最佳答案

嘿,

问题来了。在头文件中,您将 video_column_size 声明为 extern 变量,它不会创建变量(与常规 const size_t video_column_size 不同)。基本上,extern 关键字用于在链接阶段解析符号,它不分配与符号关联的内存,而仅声明该符号存在于其他地方。

因此,我们转到 first.c,这就是编译器介入的地方。由于赋值位于任何功能 block 之外,它假定您正在创建一个新的全局变量并赋值给它。由于没有明确指定类型,它假定在 first.c 中声明的新 video_column_size 变量是 int 类型,并给你一个错误,因为您导出的 extern const size_t video_column_size 和新的 int video_column_size 都创建了具有相同名称的不同强符号。链接器无法解析这两个强符号,因此您会从编译器中得到错误。

希望我设法解释了这个问题。 Here您可以找到有关该问题的更多信息。

关于c - C 程序中的共享常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45113952/

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