【问题标题】:No error reported when main doesn't returnmain 不返回时没有报错
【发布时间】:2016-05-26 02:30:31
【问题描述】:

我已经尝试了atexit() 的基本实现。虽然main() 的返回类型是int,但编译器在不从main 返回任何值的情况下执行时不会出错。

#include <stdio.h>
#include <stdlib.h>
void my_exit1(void);
void my_exit2(void);

int main(void)
{
    if (atexit(my_exit2) != 0)
        printf("can't register my_exit2");

    if (atexit(my_exit1) != 0)
        printf("can't register my_exit1");

    printf("starting main\n");
    printf("main is done\n");
    //return(0);
    //exit(0);
}

void my_exit1(void)
{
    printf("first exit handler\n");
}

void my_exit2(void)
{
   printf("second exit handler\n");
}

输出:

starting main
main is done
first exit handler
second exit handler

【问题讨论】:

标签: c unix


【解决方案1】:

在当前的 C 版本中,int main() 可以不带返回值,此时默认返回 0。对于 C99 程序也是如此。

是否应该省略 return 0 是有争议的。有效的 C 程序主签名的范围要大得多。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多