int main()、void main()和int main(void)的区别

文章讨论了C和C++中main()函数的正确形式,指出标准要求C的main()应返回整数并可能接受参数,尽管许多编译器允许voidmain(),但推荐使用intmain(void)以符合标准。

void main()    void表示main()没有返回值。有些编译器允许这样写,但是所有的标准都未认可这样的写法。

int main(void)    int表示main()函数应该返回应该整数,void表明main()不带任何参数。标准ANSI C标准要求main()函数这样做(ANSI C之前的编译器,要省略void)。有返回值的C函数要有return语句,如果遗漏main()函数中的return语句,程序在运行至最外面的右花括号时会返回0,所以可以省略main()函数末尾的return语句。

int main()    在C++中int main()和int main(void)没有区别。在C语言中这两个也都是正确的,但是第二个更标准,技术上更好。在C中,void指定了函数不接受任何参数,而int main()未指定任何参数,则可以是没有参数或者任意个参数。

所以使用int main(void)是比较好的选择。

以上内容主要来自C primer plus。

<think>我们正在讨论两个不同的问题,但用户当前的问题是关于`int main``void main`的区别,而之前的问题是关于`%d``%5d`的区别。由于用户现在的问题与之前的回答无关,我们需要专注于当前问题。 根据用户提供的引用,特别是引用[1]、[2]、[3],我们可以总结如下: 在CC++中,`main`函数的签名有特定的要求。 1. **C语言中的区别**: - `int main(void)`:表示`main`函数不接受任何参数。如果试图传入参数,编译器会报错。 - `int main()`:在C语言中,这个写法表示`main`函数可以接受任意数量的参数(但通常我们不会传递参数给`main`,除了命令行参数的情况,而命令行参数是通过`int main(int argc, char *argv[])`来处理的)。因此,在C语言中,使用`int main()`可能会允许你传递参数而不报错,但这不是标准的形式。 引用[1][2]指出:在C语言中,`int main()`可以用任意数量的参数调用,而`int main(void)`只能在没有参数的情况下调用。虽然大多数情况下没有区别,但在C语言中建议使用`int main(void)`。 2. **C++中的区别**: - 在C++中,`int main()``int main(void)`是等价的,都表示`main`函数不接受任何参数。引用[2][3]都提到在C++中,两者没有区别。 3. **关于`void main`**: 用户还提到了`void main`,但引用中并没有直接讨论。根据CC++的标准,`main`函数的返回类型应该是`int`,而不应该是`void`。使用`void main`是非标准的,虽然有些编译器(如某些嵌入式系统的编译器或旧的编译器)可能允许,但这会限制程序的可移植性。标准要求`main`函数返回一个整数给操作系统,通常返回0表示成功,非0表示错误。 因此,`void main``int main`的主要区别在于: - `int main`是符合标准的,而`void main`不是。 - 使用`int main`可以在程序结束时通过返回值指示程序状态,而`void main`无法做到这一点(或者依赖于编译器的扩展)。 总结: - **在C语言中**: - `int main(void)`:无参数,调用时不能带参数。 - `int main()`:允许任意参数(但通常不用于命令行参数,命令行参数使用`argc``argv`)。 建议使用`int main(void)`。 - **在C++中**: - `int main()``int main(void)`完全相同,都表示无参数。 - **关于`void main`**: 在任何标准C或C++中,`void main`都是非法的(除非编译器特别允许,但不建议使用)。标准写法是`int main`,并且返回一个整数值。 代码示例(C语言): ```c // 正确的写法 int main(void) { return 0; } // 也可以接受,但不推荐(在C中) int main() { return 0; } // 非标准,不推荐 void main() { // ... } ``` 在C++中: ```cpp // 两种都可以 int main() { return 0; } int main(void) { return 0; } ``` **注意**:对于带有命令行参数的`main`函数,应使用`int main(int argc, char *argv[])`或其等价形式。 §§相关问题§§ 1. 为什么C语言中建议使用`int main(void)`而不是`int main()`? 2. `main`函数可以重载吗? 3. 在C++中,`main`函数可以放在类中吗? 4. `main`函数返回的整数有什么作用? 5. 如何处理`main`函数的命令行参数? </think>### C/C++中 `int main` 与 `void main` 的区别 在C/C++语言中,`main`函数的声明方式直接影响程序的**标准符合性****可移植性**。以下是关键区别: #### 1. **标准符合性** - **`int main`**:符合C/C++语言标准(ISO/IEC 9899 14882)。 必须显式返回整数值(如 `return 0;`),用于向操作系统传递程序状态(0表示成功,非0表示错误)[^1][^3]。 ```c int main(void) { // 推荐写法(C语言) return 0; } ``` - **`void main`**:**不符合语言标准**,是编译器扩展(如Turbo C等旧编译器支持)。 无返回值,可能导致未定义行为(例如某些系统无法获取程序状态)[^1][^2]。 #### 2. **参数处理(C语言特有区别)** - **`int main()`**:在C语言中允许传入任意参数(但通常不推荐): ```c int main() { main(10); // 编译通过(C语言) return 0; } ``` - **`int main(void)`**:在C语言中明确禁止传参(编译报错): ```c int main(void) { main(10); // 错误:参数数量不匹配 return 0; } ``` > **说明**:C++中 `int main()` `int main(void)` 完全等价,均禁止传参[^2][^3]。 #### 3. **可移植性影响** | 声明方式 | C语言兼容性 | C++兼容性 | 现代编译器支持 | |------------------|-------------|-----------|----------------| | `int main(void)` | ✅ 推荐 | ✅ | ✅ (GCC/Clang) | | `int main()` | ⚠️ 允许但不推荐 | ✅ | ✅ | | `void main` | ❌ 非标准 | ❌ 非标准 | ️ 部分旧编译器 | - 示例:现代GCC/Clang编译 `void main` 会警告: ``` warning: return type of 'main' is not 'int' ``` #### 4. **何时使用 `void main`?** 仅在**特定嵌入式系统**(如8051单片机)或**遗留代码维护**中使用,且需确认编译器支持。其他场景应严格使用 `int main`: ```c // 标准安全的写法(C/C++通用) int main(void) { // 程序逻辑... return 0; } ``` > **总结**: > - 标准程序必须用 `int main` + 显式返回值 > - C语言中优先选 `int main(void)` 明确无参数 > - 避免 `void main` 以保证可移植性[^1][^2][^3]
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值