c void主要功能?返回16值

时间:2016-11-20 18:53:43

标签: c codeblocks

我在代码块中编写了一个带有void main函数的c程序。

我只是写回报没有价值 该计划如下:

#include<stdio.h>    
void main (void)   
{  
  printf ("ali tariq\n");  
  return;  
}  

但是,在控制台窗口中,程序在控制台窗口中返回值16。 “流程返回16”

我想知道它为什么会返回这个值?
如何在Windows中使用代码块来利用这个值?

谢谢

6 个答案:

答案 0 :(得分:5)

在(托管)C中,main函数必须返回int(C11§5.1.2.2.1[1])。通过使用返回类型void声明它,并且不指定任何返回值,您可以调用未定义的行为。这意味着编译器可以自由地返回任何内容,在您的情况下,结果是16。

答案 1 :(得分:1)

可以随意声明main的返回类型。为什么呢?

  1. 因为你没有写过代码调用main()。抱歉'大喊大叫,但有人写了那段代码并把它放在crt0.o左右。你的main()与该代码相关联,它不能只返回它想要的东西,因为该代码需要int。总是。它已经编写和编译。你理解这个微妙的观点吗?
  2. 因为C标准这样说。请参阅Kninnug的章节和诗歌的其他答案。
  3. 换句话说,您的代码调用未定义的行为,找到没有提供任何值的垃圾值应该不足为奇。

    所以你期望编译器发出警告?更好的确实会用正确的选择来抓住这个。例如。 gcc和clang支持-Wmain-return-type

答案 2 :(得分:0)

您不应使用void main(),而是使用int main()

答案 3 :(得分:0)

该程序具有未定义的行为。首先根据C标准主要没有参数应声明为

int main( void )

您将该函数声明为具有返回类型void。在这种情况下,启动程序的进程无法获得程序的有效返回代码。

答案 4 :(得分:0)

仅仅因为函数被声明为void并不意味着它不会返回任何内容。例如,在x86上,许多调用约定指定函数调用后寄存器EAX中的值是函数的返回值。因此,如果您有一个声明为void的C函数,但该函数的机器代码更改了EAX的值,那么它将被视为该函数的返回值。

答案 5 :(得分:0)

终止执行没有错误的每个“正常”程序,必须返回 ZERO

所以,你的程序必须是:

#include<stdio.h>   

int main (int argc, char *argv[]) // your program may have command line parameters
{  
    printf ("ali tariq\n");  
    return 0; // Program terminate with NO ERRORS
} 

但是,有些程序可能会终止 WITH 错误。

我们假设:

#include<stdio.h>    

void main (int argc, char *argv[])   
{  
    // program to make a division between two numbers

    double a, b, res;

    a = b = res = 0.0;

    printf ("Enter 1st number: ");
    scanf ("%lf", &a);
    printf ("Enter 2nd number: ");
    scanf ("%lf", &b);

    if (b == 0) return 1; // division by '0' then return ERROR (any number != 0)

    printf ("%f / %f = %f", a, b, a/b);

    return 0; // NO ERROR
} 

现在您可能会问:«但是评估的返回值在哪里?

答案:«通过操作系统。»

一个批处理文件可能会运行您的程序并读取环境变量'ERRORLEVEL'中返回的整数