首页 > 编程语言 >16、C++ primer 变量声明和定义的关系P41

16、C++ primer 变量声明和定义的关系P41

时间:2023-08-31 22:22:08浏览次数:47  
标签:定义 16 int C++ add cpp primer 声明 函数

1、什么是分离式编译?

分离式编译(Separate Compilation)是一种软件开发技术,用于将一个大型的程序分割成多个独立的源代码文件,并分别进行编译。每个源代码文件通常包含一个模块、类、函数或者其他逻辑单元的实现。

2、声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。什么意思

假设有两个源代码文件:main.cppfunctions.cpp,并且你想在 main.cpp 中使用在 functions.cpp 中定义的一个函数。

functions.cpp 文件中定义了一个加法函数:

// functions.cpp

int add(int a, int b) {
    return a + b;
}

现在,如果你希望在 main.cpp 中使用这个 add 函数,你必须在 main.cpp 中包含对该函数的声明:

// main.cpp

#include <iostream>

// 声明 add 函数,告诉编译器它的存在和签名
int add(int a, int b);

int main() {
    int result = add(5, 7); // 在 main 函数中使用 add 函数
    std::cout << "Result: " << result << std::endl;
    return 0;
}

在这里,int add(int a, int b); 是对 add 函数的声明。它告诉编译器,add 函数的存在和签名,以便在 main.cpp 文件中使用该函数而不会导致编译错误。

3、声明和定义的区别?

在C++中,声明(Declaration)和定义(Definition)是两个重要的概念,用于描述变量、函数、类等的引入和实际创建。它们之间有明显的区别。

声明(Declaration): 声明是指在程序中引入一个变量、函数、类等的标识符,但不为其分配内存空间或者提供实际的实现。声明告诉编译器这个标识符的存在,使得程序在后续使用时能够识别它。在声明中,只需要指定标识符的类型和名称。

定义(Definition): 定义是指为变量、函数、类等分配实际的内存空间,并提供其具体的实现。定义不仅告诉编译器标识符的存在,还为其分配了内存,使其可以在程序中使用。在定义中,需要指定标识符的类型、名称以及相应的实现。

举个例子来说明:

// 声明一个变量
extern int x; // 声明 x,但不分配内存空间

// 定义一个变量
int y; // 定义并分配内存空间,初始化为0

// 声明一个函数
int add(int a, int b); // 声明 add 函数的存在,但不提供实现

// 定义一个函数
int add(int a, int b) { // 定义并提供 add 函数的实现
    return a + b;
}

在这个例子中,x 是一个声明,告诉编译器有一个名为 x 的变量存在,但并未分配内存;y 是一个定义,分配了内存空间并初始化为0;add 的第一个声明告诉编译器有一个函数 add 存在,但并未提供实现;第二个 add 是一个定义,提供了函数的具体实现。

总结起来,声明是引入标识符,定义是引入标识符并分配实际的内存空间和实现。在C++中,通常可以多次声明一个标识符,但只能定义一次。这种区别在编程中非常重要,尤其在多个文件协同工作的情况下。

4、显示地初始化变量是指在声明变量的同时,为变量赋予一个初始值。这样做可以确保变量在被创建时就拥有一个明确的初始值,防止出现未初始化的情况,提高代码的可靠性。

5、变量能且只能被定义一次,但是可以被多次声明。解释一下这句话,并举例讲解

 

2.3.2

2.4.3

2.6.3

6.1.3

6.4

19.2

标签:定义,16,int,C++,add,cpp,primer,声明,函数
From: https://www.cnblogs.com/xzit201802/p/17668441.html

相关文章

  • The repository 'http://mirrors.163.com/debian jessie Release' does not have a Re
    设置Debian源为国内网易源tee/etc/apt/sources.list<<EOFdebhttp://mirrors.163.com/debian/jessiemainnon-freecontribdebhttp://mirrors.163.com/debian/jessie-updatesmainnon-freecontribEOF执行apt-getupdate出现报错root@d61378b9f12b:/#apt-getupda......
  • BOOL CALLBACK PromptProc(){} 这种符合c++ 的函数定义 格式吗?
       在C++中,函数的定义确实是由返回类型、函数名和参数列表组成的。但是在某些特殊的情况下,例如回调函数的定义,我们可能会看到类似于BOOLCALLBACKPromptProc(HWNDhwndDlg,UINTmessage,WPARAMwParam,LPARAMlParam)这样的函数定义。BOOLCALLBACK在这种情况下被用......
  • C++读取调用接口返回的json数据
    1、引入头文件#include<boost/property_tree/ptree.hpp>#include<boost/property_tree/json_parser.hpp>ViewCode2、读取json数据方法,http请求中的chunked传输数据会返回数据的长度,在最后一个chunked中其头部长度定为0//读取json文件{"name":"zhangsan","age":25}......
  • unistr函数将数据库表中的unicode转为字符(\u2161转为罗马数字Ⅱ)
    一、背景在前端页面用户输入罗马数字Ⅱ时,数据存到数据库会转为Unicode编码\u2161,需通过函数重新将Unicode编码转换回去。二、uninstr函数unistr(\xxxx)将Unicode编码转换回原来的形式,因为Unicode是带有u的,即\uxxxx,需要将u给去掉,变成oracle可识别的格式,否则oracle会提示错误。......
  • 标准C++ -- day08
    一、类型信息运算符typeid在C++中typeid可以获取数据的类型,需要加头文件typeinfo通过find/usr/include-nametypeinfotypeid是运算符,执行运算符函数,执行的返回值类型是type_info类类对象type_info中有个name的成员函数type_info中还重载了==运算符,可以......
  • C++继承
    一、什么是继承当遇到问题时,先查看现有的类是否能解决一部分问题,如果有则继承该类,并在此基础上扩展以此解决问题,从而缩短解决问题的时间(代码复用)当遇到一个大而复杂的问题时,可以把大问题拆分成若干个不同的小问题,然后为每个小问题设计一个类来解决,最后通过继承的方式把这......
  • C++ 数组排序 查找。数值排序、冒泡排序以及顺序查找的方法
    #include<iostream>#include<cstring>#include<algorithm>#include<ctime>#defineMAX8usingnamespacestd; intmain() {   inta[MAX]={1,5,9,6,3,1,4,6};  for(inti=0;i<MAX;i++)   cout<<a[i]<<"";    ......
  • P4316 绿豆蛙的归宿
    原题这篇帖子主要解释为什么正推和倒推有区别,如果想询问做法,请移步至洛谷题解区倒推:\(dp_i\)表示从\(i\rightarrown\)的期望距离,\(deg_u\)表示\(u\)点出度\[dp_u=\sum_{(u,v,w)\inE}{\frac{dp_v+w}{deg_u}}\]正推:\(dp_i\)表示从\(1\rightarrowi\)的期望距离,\(g_i\)......
  • c++数组基本用法
    在C++中,数组是一种最基本的数据结构,用于存储一组相同类型的元素。以下是有关C++数组的一些重要信息:1.**声明和初始化数组:**```cpp//声明一个整数数组,指定大小为5intmyArray[5];//初始化数组的同时赋值intanotherArray[3]={10,20,30};```2.**访问数组元素:**数组中的元......
  • C++基础
    1变量和常量C++规定在创建一个变量或者常量时,必须要制定出相应的数据类型,否则无法给变量分配内存常量不可修改,一旦修改便会报错(通常在变量定义前加关键字const)宏常量不需要制定数据类型,因为其不占内存不同数据类型占用空间不同,取值范围也不同。一旦定义的变量或常量......