为什么这段代码不起作用?(这不是实际代码,而是简化版)
#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;
}
为什么这段代码不起作用?(这不是实际代码,而是简化版)
#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;
}
#define NUMBER 5
int function( int NUMBER );
#define
是一个预处理宏,简单的文本替换。所以,让我们看看你真正想要编译的是什么:
int function( int 5 );
这没有任何意义。这部分很好:
int main (void)
{
function( NUMBER );
return 0;
}
因为您使用 value进行调用 ,但 的签名应如下所示:function
5
function
int function( int x ); // the argument is a variable, x
#define NUMBER 5
int function( int NUMBER );
是相同的:
int function( int 5 );
参数名称不能有数字。
它不起作用,因为您所做的事情毫无意义。阅读上面的答案以了解原因。
它应该是这样的:
#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 );
}
预处理后,您的代码如下所示:
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
。
行int function( int NUMBER );
是一个函数原型,是吗?您应该在其中省略 NUMBER。此外,您的函数定义应该有自己的输入变量名称 - 不要使用 NUMBER,所以要像这样:
int function( int num )
{
printf("Hi\n");
return 0;
}