我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言中定义与声明有哪些区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言中定义与声明有哪些区别

一、变量的声明与定义

首先,举个简单的例子:

int a;
extern int b;

这里的两个变量,哪个是声明?哪个是定义?

为解决这个问题,我们必须要知道声明与定义的含义。

声明:声明是用来告诉编译器变量的名称和类型,而不分配内存。

  • 告诉编译器,这个变量或者对象已经匹配到一块内存空间上了,下面代码中用到的变量或者对象会在别的地方定义,但此处并不分配内存,所以声明可以出现多次;
  • 告诉编译器,这个名字已经被预定了,别的地方不能再用它作为变量或者对象名。这种声明最典型的例子就是函数参数的声明。

定义:就是编译器为一个变量或者对象分配到一块内存空间上,并给它取名字。这个名字就是变量名或对象名,所以同一名字的变量或者对象只能被定义一次,当多次被定义的时候,编译器就会提示重复定义同一变量或对象的错误。

定义是为了给变量分配内存,可以为变量赋初值。

在上述代码中,extern 是一个关于声明的关键字,放在变量或者函数前用于声明,用来说明”此变量或者函数在别处定义“。

注意的是:即使使用了extern,如果给变量附了值,就是定义了。

我们现在知晓了声明和定义的含义,那么对于上面的例子,我想答案早已浮出水面。

int a;			//此语句为定义
extern int b;	//此语句为声明

示例:

extern int a;		//此语句为声明
extern int b = 10;	//此语句为定义
typedef int INT; 	//此语句为声明
struct Node; 		//此语句为声明
int c ;				//此语句为定义
struct Node {		//此语句为定义
    int left;
    int right;
};

上述代码中,变量名c,其类型为int,配分4字节的内存空间(不同编译器可能会有差异)。

二、函数的声明与定义

首先,我们同样先了解一下它们的含义

函数声明:告诉编译器,函数的名称、参数类型和数量以及函数返回值的类型。

函数定义:为了给函数分配内存空间。

例如:

int Max(int x, int y);	//此处声明了一个函数,其函数名为Max,参数为int x,int y,返回类型为int
int Max(int x, int y) {return x > y ? x : y;}	//此处定义了一个函数

函数的定义包含了函数的具体实现。

函数只要有实现(存在函数体{…})即为定义,否则为声明。

注:为什么这里的函数声明不用写extern?函数一般是全局的,即他的可见性是最大范围的,在别的文件也可以访问这个函数,其实函数默认就是extern,所以可以不写。

另外,当在函数前加static 时,则函数的作用域仅局限于本文件。

再来看一段代码


#ifndef _BASIC_STDY_H_
#define _BASIC_STDY_H_
//extern int a;		//在头文件中声明,必须加上extern,否则就是重定义
//void fun();		//不用加extern也可以
#endif

#include"basic_stdy.h"
#include<iostream>
using namespace std;
int a(2);
void fun(){
            cout << a <<endl;
}

#include<iostream>
//#include "basic_stdy.h"
using namespace std;
extern int a;		//ok不用包含头文件, 变量只要声明即可
extern void fun();	//ok不用包含头文件, 函数只要声明即可
int main(int argc,char **argv){
	cout << a << endl;
	fun();
	system("pause");
	return 0;
}

上述代码中一共有三个文件basic_stdy.h、basic_stdy.cpp和main.cpp,要在main.cpp中使用其他文件中定义的变量和函数,有以下两种实现方式:

1、在basic_stdy.h头文件中,声明他们,然后在main.cpp中去包含头文件;

2、在main.cpp中直接extern。

三、总结

  • 变量或函数可以声明多次,但变量或函数的定义只能一次;
  • 声明不会分配内存,定义会分配内存;
  • 声明是告诉编译器变量或函数的类型、名称等,而定义是告诉编译器变量的值,函数的具体实现。

到此这篇关于C语言中定义与声明有哪些区别的文章就介绍到这了,更多相关C语言定义与声明内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言中定义与声明有哪些区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言中定义与声明有什么区别

今天小编给大家分享一下C语言中定义与声明有什么区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、变量的声明与定义首先,举
2023-07-02

c++声明和定义有什么区别

在C++中,声明和定义是不同的概念。声明(Declaration)是指在程序中引入一个变量、函数或类的名称,告诉编译器它的存在和类型,但并不分配内存空间或实现具体的功能。声明通常是在头文件中完成,以便在其他文件中可以引用。例如:```c++
2023-08-16

C++ 函数声明和定义有什么区别?

函数声明告知编译器函数的存在,不包含实现,用于类型检查。函数定义提供实际实现,包含函数体。区分的关键特征包括:目的、位置、作用。理解差异对于编写有效且可维护的 c++++ 代码至关重要。C++ 函数声明与定义:区别和实战在 C++ 中,函
C++ 函数声明和定义有什么区别?
2024-04-18

c语言与go语言的区别有哪些

小编给大家分享一下c语言与go语言的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别:1、C语言源文件的扩展名是“.h”和“.c”,Go语言源文件的扩展名是“.go”。2、C语言中通过文件来管理代码,Go语言中
2023-06-06

编程中声明和定义有什么区别

这篇文章主要为大家展示了“编程中声明和定义有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“编程中声明和定义有什么区别”这篇文章吧。一般解释来说:声明是告诉编译器存在这么一个标识符。定义则
2023-06-17

java与c语言的区别有哪些?

java与c语言的区别有哪些?1、Java与C内存分配不同:Java中内存分配五个区,分别为栈区(存储的是局部变量,使用完毕,立即回收),堆区(存储的是new出来的东西,实体,对象,每一个对象都有地址值,每个对象的数据都有默认值,使用完毕后,会在垃圾回收器空闲
java与c语言的区别有哪些?
2020-10-28

C语言关键字及变量怎么定义与声明

这篇“C语言关键字及变量怎么定义与声明”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言关键字及变量怎么定义与声明”文章吧
2023-07-02

C语言和C#有哪些区别

这篇文章主要介绍“C语言和C#有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言和C#有哪些区别”文章能帮助大家解决问题。C#是三大主流OOP(面向对象编程)语言(C++,Java,C#
2023-06-27

c语言函数声明的方法有哪些

在C语言中,函数声明的方法有以下几种:1. 在函数使用之前,将函数的原型放在函数调用之前。例如:```cint add(int a, int b); // 函数原型int main() {int result = add(3, 4); //
2023-08-08

C语言中scanf和printf的区别有哪些

这篇文章将为大家详细讲解有关C语言中scanf和printf的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:scanf是输入函数,用于从标准输入设备(一般是键盘)输入数据;而printf是
2023-06-14

c语言中*p和p的区别有哪些

这篇文章主要讲解了“c语言中*p和p的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中*p和p的区别有哪些”吧!区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存
2023-07-04

汇编语言和c语言的区别有哪些

本文小编为大家详细介绍“汇编语言和c语言的区别有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“汇编语言和c语言的区别有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别:1、因为汇编语言实质上是机器语言
2023-07-04

c语言中abs()和fabs()的区别有哪些

这篇“c语言中abs()和fabs()的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c语言中abs()和fabs
2023-06-17

php的语法和c语言有哪些区别

这篇文章将为大家详细讲解有关php的语法和c语言有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。语法上的区别:1、PHP使用define函数来定义常量,c语言不是;2、php的所有的变量名前都要带
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录