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

发布时间 2023-08-30 22:46:45作者: 多一些不为什么的坚持

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

 

2.3.2

2.4.3

6.4

19.2