このコードが機能しないのはなぜですか? (これは実際のコードではなく、簡略化されたバージョンです)
#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;
}
値で呼び出し ているためですが、の署名は次のようになります。function5function
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;
}