【问题标题】:Use a #define number into a function in C在 C 中的函数中使用#define 数字
【发布时间】:2012-10-29 17:53:49
【问题描述】:

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

#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;
}

【问题讨论】:

  • int function( int 5 ); - 什么?
  • 对不起,函数内部的 %d 丢失了
  • 那句话有什么意义呢?毕竟,你为什么在这里使用这个#define 子句?如果未指定任何值,您是否尝试创建与 5 一起使用的函数?
  • 我想传递 NUMBER (5) 作为参数,在函数中打印出来。
  • @jotape:你在main 中成功地做到了。但是,函数不会预测它们的输入,它们将参数作为变量。这样你也可以写function(10)function(100)function(some_other_variable)。函数是可重用的代码片段。

标签: c function c-preprocessor


【解决方案1】:
#define NUMBER 5
int function( int NUMBER );

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

int function( int 5 );

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

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

因为您调用 function 的值为5,但function 的签名应如下所示:

int function( int x );  // the argument is a variable, x

【讨论】:

  • 所以 NUMBER 不是变量?
  • 不,NUMBER 不是变量。这就像在编译之前发生的剪切和粘贴操作。
  • @jotape:正如李所说(以及我的回答),不,不是。但是,即使那样,考虑到您尝试使用它的方式,它也没有多大意义。当你写void foo(int x) 之类的东西时,x 是一个函数的局部变量 foo。它不存在于函数之外。
  • 或者更确切地说 (@Lee):这就像在编译之前发生的搜索和替换操作。
  • 好吧,同样的想法(搜索 NUMBER 并粘贴到 5);-)
【解决方案2】:
 #define NUMBER 5
 int function( int NUMBER );

等同于:

 int function( int 5 );

参数名称不能有数字。

【讨论】:

  • 所以我需要一个常量?
  • 你需要读一本关于 C 编程的书并学习基础知识。
【解决方案3】:

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

应该是这样的:

#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 );
}

【讨论】:

  • 你的意思是写x,你在function中写了i,这里:printf("Hi %i\n", i)
【解决方案4】:

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

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调用 中可以正常工作,但在声明或定义中则不行;参数 name 不能是整数常量表达式。

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

【讨论】:

    【解决方案5】:

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

    int function( int num )
    {
        printf("Hi\n");
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2021-12-09
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多