gpt4 book ai didi

局部变量和函数可以在 C 中具有相同的名称吗?

转载 作者:太空狗 更新时间:2023-10-29 16:51:40 24 4
gpt4 key购买 nike

假设我有一个单个 .c 文件,其中有一个本地 变量a。我能否在该 c 文件中也有一个函数,它具有相同名称a

编辑:如果不是,为什么?

从概念上讲,局部变量存储在堆栈中,函数存储在内存的text部分。所以应该没有问题吧?

当我尝试这个时,编译器给出了错误。我想知道这是特定于编译器的还是实际上是一个错误。

最佳答案

我假设你有类似的东西:

void a (void)
{
// whatever
}

int main(void)
{
int a;
a++; // no problem, boss
a(); // <-- compiler tantrum: variable used as a function
// whatever
}

您收到的错误是由于您将 a 用作函数。

每次打开花括号时,您都定义了一个新的局部作用域,您可以在其中自由地重新定义存在于更高作用域中的符号。

在那种情况下, block 内的标识符 a 指的是一个局部变量,因此您不能将它用作函数。
顶层的 a 是一个函数,但在 block 内它被同名的局部变量定义遮蔽。
这意味着您不能从该 block (以及任何其他嵌入式子 block )中调用函数 a(更准确地说,您不能通过名称访问函数 a,但您仍然可以通过在该范围内访问该函数的指针来调用它)

这应该是为您的函数和其他全局符号定义有意义的名称的动力,因为它们必须在顶层范围中共存并且冒着被被任何较低范围的符号遮蔽。

正如其他答案所述,在其他语言(如 C++)中有称为“范围解析修饰符”的机制,允许明确指定符号的范围,但 C 中不存在。

关于局部变量和函数可以在 C 中具有相同的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21325761/

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