C 如何声明外部字符指针?

C 如何声明外部字符指针?,c,syntax,variables,global-variables,external,C,Syntax,Variables,Global Variables,External,文件1: 文件2: static char* const path; //GLOBAL int main() { path = FunctionReturningPath(); UsePath() } (伪) 要使用文件2中的路径。 我在文件1中定义了main中的global,这是使用global的错误做法吗 并且不编译: extern char* const path; //GLOBAL from file 1 UsePath() //function using globa

文件1:

文件2:

static char* const path; //GLOBAL

int main()
{
   path = FunctionReturningPath();
   UsePath()
}
(伪)

要使用文件2中的路径。
我在文件1中定义了main中的global,这是使用global的错误做法吗

并且不编译:

extern char* const path; //GLOBAL from file 1

UsePath() //function using global
{
   something = path;
}

感谢您的帮助。谢谢。

文件范围中的static关键字意味着使变量特定于该编译单元。摆脱它

Compile Error: error LNK2001: unresolved external symbol _path
错。将其设为静态意味着它是文件的本地文件,不能使用extern公开。你想要:

static char* path; //GLOBAL

删除
static
关键字,因为它将使链接器看不到符号


通常,您应该尽可能避免使用全局变量。相反,在可能的情况下,将变量作为参数传递,或者使用名称空间(如果使用C++)。使用全局变量时,您可能会遇到名称与外部库冲突的风险,并且可以从任何位置修改变量。

一个变量有
const
,另一个没有。这是有意的吗?现在
常量不匹配。:)第一个是指向可变
char
的常量指针,第二个是指向常量
char
的可变指针。现在,如果您简单地忽略
static
,它也不会工作。如果指针本身为常量,则必须主动放置
extern
并初始化它:默认情况下,常量使其具有内部链接。(挑剔,如果您(不喜欢)则忽略)正确的术语是“翻译单元”。@KennyTM,谢谢,我想知道我(错误地)在哪里听到“编译单元”?
char* path; //GLOBAL