C++标准规定main函数必须返回int,推荐写int main()并显式return 0;需包含<iostream>而非<stdio.h>,使用std::cout时须加std::前缀或using namespace std;。

main 函数必须返回 int,别写 void main
很多刚学 C++ 的人照着旧书或某些网页写 void main(),编译器可能不报错(尤其用 MSVC 时),但这是非标准行为。C++ 标准只要求 main 返回 int,操作系统靠这个值判断程序是否成功退出。
-
int main()是唯一可移植、符合 ISO/IEC 14882 标准的签名 - 可以写
int main(int argc, char* argv[]),但无参形式更常见于入门示例 - 省略
return 0;在main中是特例:编译器会自动补上,但显式写出来更清晰
#include <iostream> 不是 <stdio.h>
想用 std::cout 输出字符串,必须包含 C++ 标准库头文件 <iostream>,而不是 C 风格的 <stdio.h>。后者提供 printf,但混用容易出问题——比如忘记 using namespace std; 或误用 std:: 限定符。
-
<iostream>是 C++ 头文件,没有 .h 后缀;<stdio.h>是 C 头文件,C++ 中推荐用<cstdio> - 如果用了
<iostream>却没写std::前缀,又没加using namespace std;,编译会报错:error: 'cout' was not declared in this scope - 新手常在这里卡住几小时,其实就差一个
std::或一行using
std::endl 和 "\n" 别乱换,尤其在循环里
写 std::cout 看起来很“教科书”,但 <code>std::endl 不只是换行,它还会强制刷新输出缓冲区。频繁刷新会影响性能,尤其在大量输出或嵌入式环境里。
- 日常调试用
"\n"更轻量,等程序结束或缓冲区满时自然刷新 -
std::endl真正该用的地方:需要确保日志立刻落地(比如崩溃前最后一行)、或交互式输入前清空提示信息 - Windows 控制台对
"\n"显示正常,不需要"\r\n"—— C++ 流会自动做文本模式转换
编译命令别漏 -std=c++11 或更高
虽然 Hello World 不依赖新特性,但现代编译器(如 g++ 11+、clang 14+)默认可能不启用最新标准。如果后续加了 auto、范围 for 循环等,没指定标准会编译失败。
立即学习“C++免费学习笔记(深入)”;
- 推荐起步就加:
g++ -std=c++17 hello.cpp -o hello - Clang 类似:
clang++ -std=c++17 hello.cpp -o hello - 不加
-std=参数时,g++ 13 默认是c++17,但老版本(如 g++ 4.8)默认是c++98,行为差异很大 - IDE(如 VS Code + CMake)里也要检查
set(CMAKE_CXX_STANDARD 17)是否生效
最常被忽略的是头文件和命名空间的搭配:写了 <iostream> 却直接用 cout,或者写了 using namespace std; 却在大型项目里埋下命名冲突隐患。小例子不显,一到模块合并就难定位。










