我最近在 code::blocks 中使用 C 编程向我的导师提交了一个大数乘法和除法项目。在代码中间,我错误地使用了 return 0; 在空函数中:
void division_function (char str1[MAX_STR_LEN], char str2[MAX_STR_LEN])
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int num1[len1];
int num2[len2];
// In case the second number has more digits:
if (len2 > len1)
{
printf("\nResult of division = 0");
printf("\nRemainder = %s ", str1);
return 0 ;
}
//rest of the code
Run Code Online (Sandbox Code Playgroud)
无论如何,在提交后,讲师给我发邮件说,由于使用了 void 函数中的 return a value ,代码失败了!我知道我应该使用 (return;) 而不是 (return 0;) 因为 void 函数不返回任何内容!我的问题是为什么我的控制台中没有出现任何错误!我只是测试了这段代码:
#include <stdio.h>
#include <stdlib.h>
void function ();
int main()
{
function();
return 0;
}
void function ()
{
printf("OK");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我再次没有收到错误,输出也正常。这次我的问题是没有收到我应该收到的错误!
在标准C 中,不可能对函数return执行任何void操作 - 编译器需要发出诊断。
此外,如果函数是 non- void,那么您必须返回相同类型或隐式可转换为返回类型的内容。此规则的例外情况是,如果缺少,main编译器将插入隐式。return 0;
请注意,在 C 中,您应该将函数原型标记为具有void参数:
void function (void);
Run Code Online (Sandbox Code Playgroud)
这是 C 和 C++ 之间的一个重要区别。
除非您可以配置编译器,使其在这种情况下编译失败,否则它是有缺陷的,您应该考虑切换它。
您确实收到了警告,但您选择忽略该警告。Codeblocks 默认安装是 gcc/mingw,它会给出以下警告:
警告:“返回”带有一个值,在函数中返回 void
如果使用 编译-pedantic-errors,则会出现错误。
对于初学者的建议设置是进入“设置”->“编译器”,检查以下选项:
最好还应该添加一个-std=c11我认为 Codeblocks 中默认不存在的选项。
| 归档时间: |
|
| 查看次数: |
3662 次 |
| 最近记录: |