如何在不使用分号的情况下在C中打印“ Hello”?

时间:2019-02-15 14:19:35

标签: c

我知道有几种方法可以做到这一点。如:

#include <stdio.h> 
int main()  { 
      if (printf("Hello")) 

      return 0;
}

但是,如何通过在返回0之后删除分号来实现此目的;也一样 考虑到我不能使用void作为main()的返回类型的事实

即使下面的这篇文章也忽略了这一事实,并跳过了返回0;声明,尽管main()的返回类型为int: https://www.geeksforgeeks.org/write-a-c-program-to-print-geeks-for-geeks-without-using-a-semicolon/amp/

2 个答案:

答案 0 :(得分:5)

只要声明的main具有与int兼容的类型,如果没有显式的return语句,它将在最后一个}返回0:

C Standard, § 5.1.2.2.3程序终止

  

如果主函数的返回类型是与int兼容的类型,则从初始调用到主函数的返回等同于以主函数返回的值作为参数来调用退出函数;到达终止主函数的}会返回值0。

因此此代码将起作用:

#include <stdio.h>

int main()
{
    if(printf("Hello"))
    {

    }
}

真正的问题是,为什么要编写没有分号的程序。 IOCCC提交内容通常不仅限于此。

答案 1 :(得分:4)

从C99标准开始,如果return函数中没有明确的main语句,则编译器将添加隐式 return 0;

然后,您可以仅使用{}来保留空的代码块。

将其放在一起可能就像

#include <stdio.h>

int main(void)
{
    if (printf("Hello\n"))
    {
    }
}