C extern是否是编写不属于定义的声明的唯一方法?

C extern是否是编写不属于定义的声明的唯一方法?,c,C,得出变量声明的唯一类型是“外部声明”的结论是否合理 众所周知,下面的代码定义(而不是声明)x,因为它为变量x分配内存(KR第4章)。通常,我们只会说我们正在声明x(但不初始化它) 除了外部声明之外,是否还有其他变量声明情况?外部声明主要用于函数存在于另一个文件(源代码或对象库)中时的函数 auto用于堆栈变量,但由于它是默认值,因此很少有人明确使用它 static用于静态变量,即使在函数退出时也会保留。自动变量在函数退出时丢失,因此静态变量通常用于总计数、用户设置、状态设置,这些变量可能会更改,

得出变量声明的唯一类型是“外部声明”的结论是否合理

众所周知,下面的代码定义(而不是声明
x
,因为它为变量
x
分配内存(KR第4章)。通常,我们只会说我们正在声明
x
(但不初始化它)


除了外部声明之外,是否还有其他变量声明情况?

外部声明主要用于函数存在于另一个文件(源代码或对象库)中时的函数

auto用于堆栈变量,但由于它是默认值,因此很少有人明确使用它


static用于静态变量,即使在函数退出时也会保留。自动变量在函数退出时丢失,因此静态变量通常用于总计数、用户设置、状态设置,这些变量可能会更改,但会在程序运行的整个过程中使用。

定义是带有存储的声明。从标准:

6.7声明3/声明指定一组标识符的解释和属性。 标识符的定义是该标识符的声明 即:

-对于对象,导致为该对象保留存储

-对于函数,包括函数体;(119)

-对于枚举常量,是的(唯一)声明 标识符

-对于typedef名称,是第一个(或唯一) 标识符的声明

然后,函数原型是一个声明,如果用于前向声明,它可能不会被限定为
extern
。A


有关更多详细信息,请阅读标准第6.7节。

extern
用于几乎所有全局变量。示例:
errno
,在
中声明了
extern
。我不确定我是否完全理解您的问题。但是也有一个
静态
声明是一个声明。(所有定义都是声明)。也许你是想问“是不是
extern
写一个声明的唯一方法,而不是一个定义?”或者什么的。@M.M是的,这正是我的问题所在-让我根据你的cmmt重新表述标题,ThanksFunctions可以通过内部链接(使用static关键字)来声明。您不必使用external关键字,但函数声明仍将具有外部链接。您可以使用lokal作用域(在块内)声明函数,但仍然是外部链接。@PeterA.Schneider问题是关于变量的-但感谢您提供有关函数的信息我的问题是关于变量声明的。很抱歉,它没有回答问题。问题是,
“extern”声明是声明(而不是定义)变量的唯一方法吗?
。那么您同意“extern声明”是声明变量的唯一方法的说法吗?是的,但我不会这样说,我更喜欢“extern”是唯一不用定义就可以声明的方法。函数形式参数呢?它们不是在函数定义中定义的,只是声明的。
int x; // <-- definition NOT declaration
extern int x;
extern int a[];