回答:
foo.h
#ifndef FOO_H_ /* Include guard */
#define FOO_H_
int foo(int x); /* An example function declaration */
#endif // FOO_H_
foo.c
#include "foo.h" /* Include the header (not strictly necessary here) */
int foo(int x) /* Function definition */
{
return x + 5;
}
main.c
#include <stdio.h>
#include "foo.h" /* Include the header here, to obtain the function declaration */
int main(void)
{
int y = foo(3); /* Use the function here */
printf("%d\n", y);
return 0;
}
GCCを使用してコンパイルするには
gcc -o my_app main.c foo.c
#ifndef MY_HEADER_H
# define MY_HEADER_H
//put your function headers here
#endif
MY_HEADER_H
二重包含ガードとして機能します。
関数宣言の場合、次のように、シグネチャを定義するだけで済みます。つまり、パラメータ名は不要です。
int foo(char*);
本当に必要な場合は、パラメーターの識別子を含めることもできますが、識別子は関数の本体(実装)でのみ使用されるため、ヘッダー(パラメーターシグネチャ)の場合、識別子はありません。
これはaを受け入れてを返す関数を宣言します。foo
char*
int
ソースファイルでは、次のようになります。
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
、変数の宣言を収集して各ソースファイルの前にによってインクルードされる、これまではヘッダーと呼ばれていた別のファイル内#include
の関数。たとえば、標準ライブラリの関数は、などのヘッダーで宣言され<stdio.h>
ます。
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
宣言などの呼び出しを防ぐことはできませんfunction(42);
。使用void
中の宣言のようにvoid function(void);
ヘッダーファイルには、.cまたは.cpp / .cxxファイルで定義する関数のプロトタイプが含まれています(cまたはc ++を使用しているかどうかによって異なります)。#ifndef /#definesを.hコードの周囲に配置して、同じ.hをプログラムの異なる部分に2回インクルードした場合、プロトタイプが1回だけインクルードされるようにします。
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
次に、.hを.cファイルに次のように実装します。
client.c
#include "client.h"
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize) {
short ret = -1;
//some implementation here
return ret;
}