目录
需要当前工作区的。.vscode文件夹下的task.json进行修改
接着在一个 文件名.cpp文件中导入,.h文件,完成对函数的定义编辑
c++单文件
1.首先下载插件名为c/c++
2.此时已经拥有自动补全、调试运行等功能
如果需要多文件——
需要当前工作区的。.vscode文件夹下的task.json进行修改
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "C:\\Program Files\\mingw64\\bin\\g++.exe",
"args": ["-std=c++11",
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
我的操作:
args项:1.-g和-o之间那行,改成
"${workspaceFolder}/*.cpp",
这是官方文档可参考
2.在第一句添加
"-std=c++11",
本来是没有这句话的,我给加上了。
官方文档写的是"-std=c++17",给我报错,遂改11,
之后输出在终端处如图
关于多文件
首先要有一个 文件名.h,里面写上宏定义与函数声明
接着在一个 文件名.cpp文件中导入,.h文件,完成对函数的定义
在别的文件中导入".h"文件,即可使用函数
“.h”文件一定是在“.cpp”文件中导入过的
文件名要相同?
在C++中,.cpp 文件和 .h 文件之间的命名并没有严格的要求必须相同。通常情况下,为了保持一致性,我们会让 .cpp 文件和对应的头文件 .h 具有相同的基名称,比如 math1.cpp 和 math1.h。这样做有助于清晰地标识哪些源文件实现了哪个头文件中的接口。
然而,从技术上讲,只要在编译时正确设置了包含路径,并且确保编译器能够找到所需的头文件,即使文件名不同也是可以的。例如,math1.cpp 可以包含并实现 my_math_header.h 中的函数。
在你的项目中,由于你已经有了 math1.cpp 和 math1.h,并且它们看起来是匹配的,所以按照常规做法,它们的命名是一致的,这也是一种良好的编程习惯。如果你的项目结构允许,并且你认为有必要更改其中一个文件的名称,你也可以这样做,只要确保更新所有的引用和依赖关系即可。
总结一下,虽然文件名不一定要相同,但是保持一致通常是最好的实践,因为它可以提高代码的可读性和可维护性。
宏的写作?
在 C++ 中,头文件通常使用包含 guards(也称为宏 guards)来防止多重包含(multiple inclusion)。包含 guards 是一种常见的预处理技术,用于确保头文件的内容不会被多次包含到同一个源文件中。
包含 guards 通常使用宏定义来实现,并且这个宏的命名有一定的约定俗成的规则。虽然你可以使用任何有效的宏名称作为包含 guard,但通常建议使用与头文件名相关的命名,以减少命名冲突的可能性。
对于 math1.h
,常见的包含 guard 宏名可能是:
cpp
复制
#ifndef MATH1_H
#define MATH1_H
// 头文件内容
#endif // MATH1_H
在这个例子中,MATH1_H
是一个宏,用于检查 math1.h
是否已经被包含过。如果这个宏没有被定义,那么头文件的内容将被包含,并且宏 MATH1_H
将被定义,以防止后续的重复包含。
虽然 MATH1_H
是一个常见的命名方式,但你也可以选择其他命名方式,只要它们是唯一的并且不会与其他宏冲突即可。例如,你也可以使用:
cpp
复制
#ifndef MY_PROJECT_MATH1_H
#define MY_PROJECT_MATH1_H
// 头文件内容
#endif // MY_PROJECT_MATH1_H
这种命名方式通过包含项目名称或命名空间前缀来进一步减少命名冲突的可能性。
总结一下,虽然 MATH1_H
是一个常见的命名方式,但并不是强制性的。你可以选择任何有效的宏名称,只要它们是唯一的并且不会与其他宏冲突即可。