0

为什么这段代码不起作用?(这不是实际代码,而是简化版)

#include <stdio.h>
#define NUMBER 5
int function( int NUMBER );

int main (void)
{
    function( NUMBER );
    return 0;

}
int function( int NUMBER )
{
    printf("Hi %d\n", NUMBER);
    return 0;
}
4

5 回答 5

8
#define NUMBER 5
int function( int NUMBER );

#define是一个预处理宏,简单的文本替换。所以,让我们看看你真正想要编译的是什么:

int function( int 5 );

这没有任何意义。这部分很好:

int main (void)
{
    function( NUMBER );
    return 0;    
}

因为您使用 value进行调用 ,但 的签名应如下所示:function5function

int function( int x );  // the argument is a variable, x
于 2012-10-29T17:55:22.773 回答
3
 #define NUMBER 5
 int function( int NUMBER );

是相同的:

 int function( int 5 );

参数名称不能有数字。

于 2012-10-29T17:55:11.023 回答
2

它不起作用,因为您所做的事情毫无意义。阅读上面的答案以了解原因。

它应该是这样的:

#include <stdio.h>
#define NUMBER 5

void function ( int );  // a function prototype, saying 'function' accepts an int as the first argument.

int main ( void ) // the 'main' is called when the program runs.
{
   function ( NUMBER );
   return 0;  // returning zero means that no error was encounter in the program
}

void function( int i )
{
   printf ( "Hi %d\n", i );
}
于 2012-10-29T17:59:17.047 回答
1

预处理后,您的代码如下所示:

int function( int 5 );

int main (void)
{
    function( 5 );
    return 0;

}
int function( int 5 )
{
    printf("Hi %d\n", 5 );
    return 0;
}

也就是说,在编译代码之前,所有出现的符号NUMBER都被替换为整数常量。5这在对 的调用中可以正常工作function,但在声明或定义中却不行;参数名称不能是整数常量表达式。

您将需要更改声明和定义,以便不命名参数NUMBER

于 2012-10-29T18:03:33.163 回答
0

int function( int NUMBER );是一个函数原型,是吗?您应该在其中省略 NUMBER。此外,您的函数定义应该有自己的输入变量名称 - 不要使用 NUMBER,所以要像这样:

int function( int num )
{
    printf("Hi\n");
    return 0;
}
于 2012-10-29T17:56:31.523 回答