2. 基本语法
1. 程序入口
在 C++ 标准中,main 函数是程序启动后调用的第一个用户定义函数,它有两种标准的定义形式:
int main():这种形式表示main函数不接受任何命令行参数。它向调用者返回一个整数值,用于表示程序的退出状态。通常,返回值0表示程序正常结束,非零值表示程序出现异常或错误。int main(int argc, char *argv[]):这种形式允许程序接收命令行参数。argc是一个整数,表示命令行参数的数量(包括程序名本身);argv是一个指向字符指针数组的指针,每个字符指针指向一个命令行参数的字符串,其中argv[0]是启动进程进程的命令。同样,该函数也返回一个整数值作为程序的退出状态。
返回值:虽然main函数的返回类型是int,但在 C++ 中,如果main函数执行到末尾时没有显式地使用return语句,编译器会隐式地插入return 0;,这意味着程序默认以正常状态退出。不过,为了代码的可读性和可维护性,建议显式地添加return语句。
2. 命名规范
- 文件名:小写蛇形
- 类名:大驼峰
- 数据类型:大驼峰
- 变量:小写蛇形
- 全局变量:g_开头
- 命名空间:小写蛇形
- 函数名:小驼峰
- 枚举名:大驼峰
- 宏变量:大蛇形
3. 类型别名
<span class="tag">#include</span><iostream>
<span class="tag">#include</span> <limits>
using namespace std;
typedef long int intsize8; // 类型别名
int main()
{
intsize8 count = 0;
# size: 8
cout << "size: " << sizeof(count) << endl;
return 0;
}
4. 枚举类型
<span class="tag">#include</span><iostream>
<span class="tag">#include</span> <limits>
using namespace std;
enum Color {
red,
green=5,
yellow,
};
int main()
{
// red value: 0 green value: 5 yelow value: 6
cout << "red value: " << red << " green value: " << green << " yelow value: " << yellow << endl;
}
5. 流运算符
<<和>>是用于位移运算符,在标准库中,std::cout 和 std::cin 分别是 std::ostream 和 std::istream 类型的对象。为了能让这些流对象可以处理不同类型的数据(如 int、double、char 等),标准库对 << 和 >> 运算符进行了大量的重载。这样就能把不同类型的数据插入到输出流中。例如,对于字符串类型const char*,<< 运算符会把字符串的内容输出到控制台;对于整数类型(int),<< 运算符会把整数的十进制表示输出到控制台。
<span class="tag">#include</span> <iostream>
int main() {
int num = 10;
double d = 3.14;
char ch = 'A';
std::cout << "整数: " << num << std::endl;
std::cout << "浮点数: " << d << std::endl;
std::cout << "字符: " << ch << std::endl;
return 0;
}
<< 主要用于将数据插入到输出流中。具体解释如下:
std::cout:这是 C++ 标准库中定义的标准输出流对象,它与控制台屏幕相关联,主要用于向控制台输出数据。<<运算符:它会把右侧的数据插入到左侧的输出流对象中。当你使用std::cout << "This is a custom cout function."时,字符串"This is a custom cout function."就会被插入到std::cout输出流里,进而显示在控制台上。- 链式使用:
<<运算符支持链式调用,也就是说你可以连续使用多个<<运算符,像std::cout << "This is a custom cout function." << std::endl;这样。这行代码会先把字符串插入到输出流,接着把std::endl插入到输出流。std::endl是一个操纵符,它的作用是插入换行符并刷新输出缓冲区。
>> 作为流提取运算符,主要用于从输入流中读取数据并将其存储到变量中。>> 运算符是一个二元运算符,它从左侧的输入流对象(如 std::cin 或文件输入流对象)中提取数据,并将提取的数据存储到右侧的变量中。输入流可以是标准输入(键盘输入)、文件输入等。该运算符会根据右侧变量的类型来解析输入数据。
<span class="tag">#include</span> <iostream>
int main() {
int num;
double d;
char ch;
// 从标准输入读取一个整数
std::cout << "请输入一个整数: ";
std::cin >> num;
// 从标准输入读取一个浮点数
std::cout << "请输入一个浮点数: ";
std::cin >> d;
// 从标准输入读取一个字符
std::cout << "请输入一个字符: ";
std::cin >> ch;
// 输出读取到的数据
std::cout << "你输入的整数是: " << num << std::endl;
std::cout << "你输入的浮点数是: " << d << std::endl;
std::cout << "你输入的字符是: " << ch << std::endl;
return 0;
}
6. extern关键字
- 共享全局变量:当你在一个源文件中定义了一个全局变量,而在另一个源文件中需要访问这个变量时,就需要在第二个文件中声明这个变量,并使用
extern关键字。 - 函数声明:当在某个源文件中定义了一个函数,并希望在另一个源文件中调用它时,同样需要在调用它的文件中声明这个函数,并可以使用
extern关键字(虽然在C/C++中通常省略extern,仅使用函数原型声明也是可以的)。 - 链接属性:
extern关键字还可以用来控制变量或函数的链接属性。例如,可以使用extern "C"在C++代码中声明C语言的函数,以便正确链接。
详细研究下。。。。。。。
b.cpp
<span class="tag">#include</span><iostream>
<span class="tag">#include</span> "a.h"
using namespace std;
// 也可以不通过引头文件的方式,直接声明外部变量或函数引用
// extern int global_var;
// extern void global_say_hello(); // 声明 global_say_hello
// void global_say_world(); // 声明 global_say_world,可以省略extern
int main()
{
cout << global_var << endl;
global_say_hello();
global_say_world();
}
a.h
<span class="tag">#ifndef</span> GLOBALS_H
<span class="tag">#define</span> GLOBALS_H
extern int global_var; // extern不可省略
extern void global_say_hello(); // extern可省略
extern void global_say_world(); // extern可省略
<span class="tag">#endif</span> // GLOBALS_H
// <span class="tag">#ifndef</span>, <span class="tag">#define</span>, <span class="tag">#endif</span> 来防止头文件被重复包含
a.cpp
<span class="tag">#include</span><iostream>
using namespace std;
int global_var = 1;
void global_say_hello() {
cout << "hello" << endl;
}
void global_say_world() {
cout << "world" << endl;
}
7. include
<>:用于包含系统标准库头文件,编译器仅在标准库目录和内置包含路径中查找。"":用于包含用户自定义的头文件,编译器先在当前源文件所在目录查找,若未找到再去标准库目录和内置包含路径中查找。