首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何声明静态变量但不定义它

如何声明静态变量但不定义它
EN

Stack Overflow用户
提问于 2009-12-08 12:35:09
回答 6查看 5.8K关注 0票数 7

有时我们需要预先声明一个静态变量,然后再使用它。但是这个声明的变量名可能是错误的,编译器无法检测到它,哦!

示例:

代码语言:javascript
运行
复制
/* lots of codes */
static some_type some_name; /* pre-declaration */
                            /* but it may define "some_name" */
/* use some_name */

/* lots of codes */

static some_type someName = initialization; /* definition */
/* use someName */

/* lots of codes */

"some_name“和"someName”是不同的,我们在开头使用了错误的变量。如果预声明语句没有定义任何东西,编译器将检测到错误。

那么,如何声明静态变量而不定义它呢?如何将预声明更改为新的声明,使编译器可以检测到错误的名称?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-08 12:41:53

在您描述的情况下,gcc会给出一个警告:

代码语言:javascript
运行
复制
./x.c:3010: warning: 'someName' defined but not used

解决方案:做你当前正在做的事情,但不要忽视编译器警告;)

编辑:

对于你更新的问题:不,我不相信有一种方法可以简单地声明一个静态变量(而不定义它)。

常见的解决方案是确保所有的全局作用域变量只声明一次,如果需要,可以使用初始化器。

票数 9
EN

Stack Overflow用户

发布于 2009-12-08 12:41:46

代码语言:javascript
运行
复制
static some_type some_name; /*definition */

静态变量some_name已被初始化为0;它是定义,而不仅仅是声明。

在IMO中,静态变量不能只在C中使用外部说明符声明,因为它的链接总是内部的。

票数 8
EN

Stack Overflow用户

发布于 2009-12-08 13:26:06

不可能在C语言中创建具有内部链接的对象的非定义声明(也就是您的术语中的“预声明”)。

这是一个暂定的定义,也就是您在示例中的定义。但在打字错误的情况下,暂定的定义将隐含地产生一个独立的定义,而不是链接器错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1864615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档