<p>C++标准要求main函数必须返回int,合法形式为int main()或int main(int argc, char* argv[]);#include <iostream>不可省略;字符串字面量须用双引号;编译需指定C++11及以上标准。</p>

main 函数必须返回 int,不能是 void
很多刚写 C++ 的人照着旧教程写 void main(),编译器会报错或警告——这不是标准 C++。C++ 标准(ISO/IEC 14882)只承认 int main() 或带参数的 int main(int argc, char* argv[]) 两种合法签名。
-
int main()是最简形式,函数末尾不写return也隐式返回 0(表示成功) - 用
void main()在 GCC/Clang 下通常报error: 'void main()' is not allowed in C++;MSVC 可能容忍但属非标准行为 - 返回非 0 值(如
return 1;)常用于向操作系统传递错误信号,调试时可配合echo $?(Linux/macOS)或echo %ERRORLEVEL%(Windows)验证
#include <iostream> 不是可选的
写 std::cout << "Hello, world!"; 却没加 #include <iostream>,编译直接失败:找不到 std::cout 定义。这不是“头文件包含习惯问题”,而是符号可见性的硬性要求。
-
<iostream>提供输入输出流对象(std::cin、std::cout)和操作符重载(<<、>>) - 别用
#include <stdio.h>混搭 C 风格(printf),虽然能运行,但破坏了 C++ 的类型安全机制(比如printf("%s", 42)不报错,而std::cout << 42类型明确) - 不需要
using namespace std;——显式写std::cout更清晰,尤其在大型项目中避免命名污染
字符串字面量必须用双引号,单引号会出错
把 "Hello, world!" 写成 'Hello, world!',编译器会报 error: character constant too long。C++ 里单引号只接受单个字符(如 'A'、'\n'),多字符字面量不是字符串,也不是合法常量。
- 双引号包裹的是
const char[14]类型的字符串字面量,可隐式转为const char* - 误用单引号还可能触发多字符字面量(multi-character literal)的实现定义行为,GCC 会打包成整数(如
'abcd'→0x61626364),毫无可移植性 - 想输出换行?用
std::cout << "Hello, world!\n";或std::cout << "Hello, world!" << std::endl;;后者刷新缓冲区,前者更轻量
编译命令别漏 -std=c++11 或更高
某些老教程教用 g++ hello.cpp 直接编译,看似能跑,但若后续加入 auto、范围 for 循环等特性,会提示 error: 'auto' does not name a type ——因为默认标准太旧(GCC 早期默认 C++98)。
立即学习“C++免费学习笔记(深入)”;
- 显式指定标准:用
g++ -std=c++11 hello.cpp -o hello(C++11 起支持现代语法) - C++17 更稳妥:
-std=c++17,支持结构化绑定、inline变量等实用特性 - Clang 同理,且建议加
-Wall -Wextra捕获潜在问题,比如忘记return值(虽有隐式规则,但显式写更可靠)
新手最容易忽略的是标准版本和头文件依赖的强制性——它们不是“风格偏好”,而是编译能否通过的硬门槛。写完第一行代码后,先确认 main 类型、#include、引号、编译选项这四点,比调样式或加注释重要得多。











