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

値で呼び出し ているためですが、の署名は次のようになります。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 に答える