gpt4 book ai didi

c - 在两个模块之间共享 sizeof(array)

转载 作者:行者123 更新时间:2023-12-03 16:34:46 25 4
gpt4 key购买 nike

我想分享 sizeof(array) 的值在两个 .c 模块之间。数组在文件 A 中初始化,所以编译器在编译时知道大小,然后我想在另一个 B 文件中使用这个数组的大小。
例子:
在 A.c 文件中:

int arr[] = {1, 2, 3};
.
.
.

for (int i = 0; i < sizeof(arr); i++); // that works
在 A.h 文件中:
extern int arr[];
在 B.c 文件中:
#include "A.h"
.
.
.

for (int i = 0; i < sizeof(arr); i++); // here compiler doesn't know size of this arr
有没有办法使这项工作?我知道为什么这不起作用,但也许有一个偷偷摸摸的技巧来解决这个问题。

最佳答案

有没有办法使这项工作?我知道为什么这不起作用,但也许有一个偷偷摸摸的技巧来解决这个问题。
不幸的是,这不是很偷偷摸摸,但它确实有效......
some.h

//declare as extern for project global scope
extern int arr[];
extern size_t gSizeArray;
然后在 some.c
//define and initialize extern variables in 1 (and only one) .c file, 
int arr[] = { 1,2,3 };
size_t gSizeArray = sizeof(arr)/sizeof(arr[0]);
someother.c其中包括 some.h
#include "some.h"
//you can now see the value of gSizeArray in this file

printf("%zu\n%d,%d,%d\n", gSizeArray, arr[0], arr[1], arr[2]);//should output

3
1,2,3


警告
以这种方式使用外部变量的值(value)在于,该变量的值可以在一个模块中改变,并且可以在任何 .c 中看到相同的值。包含 some.h 的文件
推论
以这种方式使用 extern 的问题是该变量的值可以在一个模块中改变,并且在任何 .c 中都可以看到相同的值。包含 some.h 的文件.
(或者换句话说,要小心。全局变量,尤其是 extern 全局变量可能会有所帮助,但它们也可能很危险。特别是对于代码的维护者,他们不是代码的作者,他们可能不知道变量是 extern 范围,并以不适当的方式在不知不觉中使用它。
顺便说一句,关于使用外部作用域 in this post 的内容可能比你想知道的还要多。 .

关于c - 在两个模块之间共享 sizeof(array),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62594612/

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