gpt4 book ai didi

c - 在 C 中,如何将全局变量的范围限制在声明它的文件中?

转载 作者:太空狗 更新时间:2023-10-29 17:05:12 25 4
gpt4 key购买 nike

我是 C 的新手。我面前有一本书解释了 C 的“文件范围”,包括示例代码。但是代码只声明和初始化一个文件范围的变量——它不会通过尝试以非法方式访问它来验证变量的范围。所以!本着科学精神,我构建了一个实验。

文件bar.c:

static char fileScopedVariable[] = "asdf";

文件 foo.c:

#include <stdio.h>
#include "bar.c"

main()
{
printf("%s\n", fileScopedVariable);
}

根据我的书和 Google 的说法,对 printf() 的调用应该会失败,但事实并非如此。 foo.exe 输出字符串“asdf”并正常终止。我非常想使用文件范围。我错过了什么?

最佳答案

您 #included bar.c,它的作用是导致预处理器在编译器接触它之前将 bar.c 的内容逐字复制到 foo.c 中。

尝试去掉 include,但告诉你的编译器编译这两个文件(例如 gcc foo.c bar.c)并观察它如你所料的报错。

编辑:我想主要的混淆是在编译器和预处理器之间。语言规则由编译器强制执行。预处理器在编译器之前运行,并作用于那些以# 为前缀的命令。预处理器所做的只是处理纯文本。它不会解析代码或尝试以任何方式解释代码的含义。 “#include”指令非常直白——它告诉预处理器“在此处插入此文件的内容”。这就是为什么您通常只在 .h(头文件)文件上使用#include,并且只在头文件中放置函数原型(prototype)和外部变量声明。否则,您最终将多次编译相同的函数或定义相同的变量,这是不合法的。

关于c - 在 C 中,如何将全局变量的范围限制在声明它的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046546/

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