一个完整c++程序必须且仅有一个main()函数作为入口,签名应为int main()或int main(int argc, char* argv[]),返回int以向操作系统传递状态;void main()非标准;需#include标准头文件(如),使用std::限定或谨慎使用using;语句以;结尾,代码块须用{}包裹。

一个完整 C++ 程序必须包含且仅包含一个 main() 函数,其余部分可选但常见;缺 main() 直接编译失败,多定义则链接报错 multiple definition of 'main'。
必须存在的 main() 函数
它是程序唯一入口,操作系统靠它启动执行。签名通常为 int main() 或带参数的 int main(int argc, char* argv[])。返回 int 类型不是可有可无的约定——它是向操作系统传递退出状态的正式通道。
-
return 0;表示成功,非零值(如return 1;)通常表示异常或错误 - 省略
return语句在main()中是特例:C++11 起隐式补return 0;,但显式写出更清晰、更易调试 - 不能写成
void main()—— 这不是标准 C++,多数编译器会警告甚至拒绝(如 GCC 启用-pedantic时)
预处理指令(尤其是 #include)
它们在编译前由预处理器处理,不属 C++ 语法本身,但几乎每个实用程序都依赖它来引入声明。最常见的是 #include <iostream></iostream>,用于输入输出支持。
-
<iostream></iostream>是标准头文件,不带.h后缀;旧式写法#include <iostream.h></iostream.h>已废弃,会导致编译失败或未定义行为 - 头文件名区分大小写,
#include <iostream></iostream>在 Linux/macOS 下无法通过 - 多个
#include顺序一般不影响功能,但若某头文件依赖另一头文件中定义的类型,顺序就关键了(比如先#include <string></string>再用std::string)
名称空间使用(using namespace std; 或限定调用)
std 是标准库所有组件所在的名称空间。不加声明直接写 cout 会报错 <code>'cout' was not declared in this scope。
- 推荐写法是
std::cout —— 显式限定,避免污染全局命名空间,尤其在大型项目或头文件中 -
using namespace std;放在main()内部是安全的,放全局作用域可能引发命名冲突(比如你自己定义了list,又用了using namespace std;) - 折中方案:
using std::cout;只引入需要的符号,比整个namespace更可控
语句与代码块的基本规则
C++ 不靠缩进或换行识别逻辑结构,而严格依赖标点和花括号。哪怕只有一条语句,if 或 for 后漏掉 {} 也极易埋下维护雷。
- 每条完整语句必须以分号
;结尾;漏写会触发expected ';' before ...类错误 - 函数体、
if/else分支、循环体都必须用{}包裹;即使单行也不建议省略,否则嵌套修改时容易出错 - 注释不参与执行,但
//注释不能跨行,/* ... */可跨行但不能嵌套(/* outer /* inner */ outer end */是非法的)
最容易被忽略的是:所有这些“组成部分”最终要落在同一个翻译单元(即一个 .cpp 文件)里才能构成可独立编译的完整程序;跨文件拆分时,main() 仍只能出现在其中一个文件中,其余需通过声明、头文件、链接协同工作——那已是另一个层面的组织问题了。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











