gpt4 book ai didi

c - 作用域如何影响同名的全局和局部结构?

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:55 24 4
gpt4 key购买 nike

我已经声明了两个具有相同名称 foo 的不同结构,因为其中一个被声明为全局的,并且可以很容易地被程序中的任何函数访问。但是我在 main 中有第二个结构,它是在本地声明的。

最坏的情况是最坏的情况,我需要在 main 中访问它们吗?我通过声明具有不同名称的结构变量来做到这一点。但现在的问题是我需要检查结构的大小......我应该如何获得本地结构而不是全局结构的大小?

#include <stdio.h>
#include <stdlib.h>

struct foo {
char arr1[200];
int x_val;
int y_val;
float result;
};
struct foo globe_foo;

int main()
{
struct foo {
char c;
char arr[20];
int x;
};

struct foo my_foo;
globe_foo.x_val = 20;
printf("Globe foo x_val: %d\n",globe_foo.x_val);
printf("Size of struct foo is: %d\n",sizeof(struct foo));

//how to check size of global decleared stuct foo?
printf("Size of struct foo is: %d\n",sizeof(struct foo));
system("pause");
return 0;
}

最佳答案

block 作用域内与全局作用域同名的变量隐藏了全局标识符

ISO C9899 in 6.2.1说:

If an identifier designates two different entities in the same name space, the scopes might overlap. If so, the scope of one entity (the inner scope) will be a strict subset of the scope of the other entity (the outer scope). Within the inner scope, the identifier designates the entity declared in the inner scope; the entity declared in the outer scope is hidden (and not visible) within the inner scope.

因此,如果您只是在 main() 中引用类型名称,那么全局 struct foo 将完全隐藏(就好像它不存在一样)。

建议:对这些类型使用不同的名称或使用具有不同名称的变量或对结构类型进行 typedef。

您的 printf("Size of struct foo is: %d\n",sizeof(struct foo)); 将仅给出本地 struct foo 的大小(28 或 25 取决于)。

关于c - 作用域如何影响同名的全局和局部结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15515441/

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