已知 extern int a;是 declaration
举报· 162 次点击
登录 注册 站外分享
12 条回复  
febhfrswsz 小成 2024-3-22 20:16:50
然后呢
kk7896 小成 2024-3-22 20:25:52
definition
nyxsonsleep 初学 2024-3-22 21:00:11
以下示例演示的声明也是定义:

C++

// Declare and define int variables i and j.
int i;
int j = 10;

下面这些声明不是定义:

C++

extern int i;
char *strchr( const char *Str, const char Target );

https://learn.microsoft.com/zh-cn/cpp/cpp/declarations-and-definitions-cpp?view=msvc-170
vituralfuture 小成 2024-3-22 22:43:01
定义,因为分配了内存
realJamespond 小成 2024-3-23 01:12:50
在头文件是声明,在源文件是定义
FranzKafka95 小成 2024-3-23 08:12:13
赞同楼上的
mintist 小成 2024-3-23 10:23:45
有内存空间分配就是定义,声明对应汇编的符号,仅仅为了告诉你有这个东西在这里
PTLin 小成 2024-3-23 11:32:48
不如看文档
https://zh.cppreference.com/w/c/language/extern
https://zh.cppreference.com/w/c/language/declarations
koebehshian 小成 2024-3-23 15:16:52
The C Programming Language 附录 A ,A.8 Declarations 中说:

```
Declarations specify the interpretation given to each identifier; they do not necessarily reserve storage associated with the identifier. Declarations that reserve storage are called definitions.
```

所以,首先要明白,definition  是 declaration 的一种,区别在于 definition 为变量预留了内存
所以,你的问题应该修改为:int a;  有没有预留内存。

答案是:大多数情况下预留了内存。只有一种情况,就是写在函数外面

A.10.2 External Declarations 中说:

```
An external object declaration that does not have an initializer, and does not contain the extern specifier, is a tentative definition. If a definition for an object appears in a translation unit, any tentative definitions are treated merely as redundant declarations.
```

意思是,int a; 写在函数外面,编译器先会将其待定;如果发现整个编译单元(一般是一个预处理过的源文件)中有多个这样的写法,则多余的就被当作没有预留内存的 declarations 了
12下一页
返回顶部