我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.
有人可以给我一个解释:
1)究竟是什么
2)在使用C++编程时,我应该何时考虑使用它
3)如果它只与C++有关,或者它可以与其他编程语言一起使用
我可能已经在不知道术语的情况下使用它了....
我有两个C文件.
在file1.c
int main()
{
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
file2.c中
static void func(void)
{
puts("func called");
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我用命令编译上面的代码cc file2.c file1.c,我得到了以下内容,
undefined reference to `func'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除file2.c中的static关键字并使用命令编译上面的代码,它就会成功运行.cc file2.c file1.c
所以,我有一个问题,C中的void和static void函数有什么区别?
我最近遇到的问题是如何访问一个在file1.c中声明为static的变量到另一个file2.c?
是否可以访问静态变量?
我对C中静态关键字的理解是,
static是"内部链接",因此只能从一个编译单元访问它们 - 它们被定义的单元.使用内部链接声明的对象是单个模块的私有对象.
正如我的一位朋友建议我解决方案.
在 file1.c
#include <stdio.h>
int main()
{
int b=foo();
printf("%d",b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 file2.c
static int a=25;
int foo()
{
return a;
}
Run Code Online (Sandbox Code Playgroud)
汇编 gcc file1.c file2.c -o file
如果我在上面,我可以访问变量.
所以我的问题是:
上述程序是否违反静态变量规则?
如果没有,为什么会这样,除了包括file(#include <…>)之外,还有其他方法可以访问静态变量.
如果我对静态变量概念有误,并且有更好的解决方案可用于访问静态变量,请纠正我?