0

私はこのサイトを初めて使用し、C の経験が豊富ではないため、無意識のうちに犯す可能性のある間違いを許してください。わかりましたので、C には 2 つのファイルがあり、1 つは関数を含み、もう 1 つはその関数を使用しています。そのためのヘッダー ファイルを作成する必要があると思いますが、どうにかしてそれを作成できず、助けが必要です。ここにファイル1があります:

#include<stdio.h>
int tempc=25,tempf;
int c2f(int c);
void main()
{ 
tempf=c2f(tempc);
printf("Celsius = %d,Farenheit=%d \n",tempc,tempf);
}
int c2f(int c)
{
int f;
f=9*c/5 + 32;
return f;
}

ファイル 2 は次のとおりです。

#include<stdio.h>
int tempc=25,tempf;
extern int c2f(int c);
void extern show(void);
void main()
{
tempf=c2f(tempc);
show(); 
}

主な質問はここにあります。show 関数についても考えているかもしれません。実際には、f1 を .asm ファイルに変換し (tcc -S f1.c を使用)、アセンブリ言語を使用して show fn 用のモジュールを追加し、.asm ファイルの .obj ファイルを作成し、f2 の .obj ファイルを & 使用するように求められます。 、それらをプロジェクトに入れてから、すべてをビルドして.exeファイルを作成する必要があります.しかし、.cとして2つのファイルを使用してプログラムを実行できれば(つまり、ヘッダー部分が解決された場合)、残りを実行できると思います。最後の質問は、上記でやりたいヘッダーを作成する代わりに、これら 2 つのファイルをそのままにして、ヘッダー ファイルを作成し、.obj にしてプロジェクトに追加してビルドすることは可能ですか?

助けようとする人に心から感謝します。

4

2 に答える 2

1

ヘッダー ファイルは、関数を他の C モジュールに「公開」するためのメカニズムとして使用することを意図しています。たとえば、c2f.c で c2f() 関数を定義してから、c2f.h でプロトタイプ (基本的には単なるプレースホルダー) を作成します。c2f.h のプロトタイプは次のようになります。

int c2f(int c);  /* Note the semicolon */

c2f() の実装がアセンブリにあるのか、C ファイルにあるのかは問題ではありません。ヘッダー ファイルは、C モジュールが c2f() を呼び出すことを許可するだけです。これは、関数の実際の実装を見つけるためにリンカー情報を提供しているためです。次に、リンカーは、その関数へのすべての呼び出しを実装の実際のアドレスに一致させます。したがって、c2f を使用するには、それを使用しているファイルで c2f.h を参照するだけです。

/* main.c */
#include "c2f.h"
...
于 2013-08-27T15:38:27.370 に答える