私は、C の関数の書き方は、例えば以下のようにしています。
int f1(int x,int y)
{
int p;
....
}
int f2(double *long_name_variable_1, int *long_name_variable_2,
char *long_name_variable_3, float *long_name_variable_4,
long *long_name_variable_4)
{
int p;
....
}
おおまかには、次のようなルールで書いています。
この私の (現在の) ルールによれば、行頭にインデントなしで (中カッコでなく) 文字が始まっていればそれは関数定義部となりそうですが、 実際の C のソースでは必ずしもそうではなく、 これ以外にも行頭から文字が始まる場合があります。 私が関数定義部以外に行頭から書くものとしては、以下のようなものがあります。
int external_variable1;
double ex1=0.0,ex2=1.0;
#include <stdio.h>(長いマクロ定義では、2 行目以降にインデントを入れて書く)
#define add(x,y) ((x)+(y))
#ifdef HOGE
typedef struct mylist {
int n;
struct mylist *next;
} Mylist;
enum Error_number { Err_file, Err_input, No_Err=0 };
/* これはコメント */
/* これもコメント
* これもコメント
*/
char (*a)[10]; double (*f)(double);みたいなものを決して使わないとはいえませんが、 これは行末が `)' では終わらず、`;' で終わりますので それで判別できます。 プロトタイプ宣言が既にある場合も同様です。
よって、今回は、
結局、この関数定義部分の判別は複数の行によってなされることになるので、 AWK でも結構面倒です。