C函数语法

时间:2014-10-28 11:11:59

标签: c

我是C的新手并开始浏览Learn C(http://www.learn-c.org/)。在功能部分,练习要求用户打印x is big如果x> 10.我的问题是正式答案是

int print_big(int number){
    if(number > 10){
        printf("%d is big\n",number);
    }
}

为什么输出类型为int而不是void类型?另外,有人可以解释当输出类型为x is big时函数如何打印integer文本?是因为x is big文本足够小以适应内存"容器"一个整数适合?

4 个答案:

答案 0 :(得分:6)

理想情况下,函数应该返回void,因为函数没有为调用者返回任何内容。

void print_big(int number){
    if(number > 10){
        printf("%d is big\n",number);
}

答案 1 :(得分:6)

你的功能应该是..

void print_big(int number){
 if(number > 10){
    printf("%d is big\n",number);
 }

因为你没有返回任何内容..你的函数应该是function with argument and without return type的类型。

答案 2 :(得分:1)

  

另外,有人可以解释一下当输出类型是整数时函数是如何打印的x是大文本吗?

输出和返回值是两个完全不同的东西;文本没有返回给函数的调用者,它只是被写入标准输出流。

如上所述,没有被返回给函数的调用者。它会像这样使用:

void foo( void )
{
  int val = 0;
  printf( "gimme a number: " );
  scanf ( "%d", &val );
  print_big( val );
}

请注意,foo并未将print_big的结果分配给任何内容;我们的意思是"来电者没有使用值"。无论返回什么,都会被丢弃。

正如评论中所提到的,解决方案代码可能是在1989年语言标准之前的K& R天(20世纪70年代末至80年代中期)的延续。直到1989年的标准,没有void类型;标准做法是使函数类型int和调用者不使用返回值。虽然这并不能解释解决方案代码中缺少return语句。

或者它可能只是写得不好的代码(更有可能);不幸的是,有很多人认为他们认识C并希望分享他们的知识,但是他们犯了很多错误,并传递了许多错误信息和不良做法。警惕所有在线教程和大多数印刷参考。

官方解决方案应该是键入void

void print_big( int number )
{
  if ( x > number )
   printf( "x is big\n" );
}

或它应该有一个明确的return语句:

int print_big( int number )
{
  if ( x > number )
    printf( "x is big\n" );
  return 0;
}

从这个讨论中可以明显看出,函数返回的值不会使用。例如,printf函数返回写入输出流的字节数,但您不会经常看到明确检查该结果的代码;结果通常被丢弃(即,没有分配给任何东西)。同样,scanf会返回成功转化和分配的次数。同样,很多人只是忽略了这个结果(尽管他们不应该这样做)。

答案 3 :(得分:0)

嗨Dude每当你想将值返回给调用函数时,你应该使用int作为返回类型。在大约代码中,您在同一功能块中打印值,而您不需要将值返回给调用函数。 如果要将值返回给调用函数,那么我们使用int作为返回类型,请参阅代码:

int print_big(int number){
if(number > 10){
    printf("%d is big\n",number);
    return 1; //if number is greater than 10 then return 1
    }
    else{ return 0;//if false
    }
}