Erlang与C语言的头文件对比
Erlang中头文件的定义:
record.hrl:
%% this is a record.hrl (header) file.
-ifndef(record).
-define(record,true).
-record(person, {name,
type=industrial,
hobbies,
details=[]}).
-endif.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
test.erl:
%%
%% Exported Functions
%%
-include("record.hrl").
-export([getName/1]).
%%
%% API Functions
%%
getName(Name)->
Person= #person{name=Name, hobbies=["Crushing people","petting cats"]},
Person#person.name.
=================================================================
c语言中头文件:
person.h
#ifndef PERSON_H
#define PERSON_H
typedef struct Person{
char name[20];
char type[20];
char hobbies[20];
char details[20];
} Person;
#endif
###############################################################################
test.c
#include
#include "person.h"
int main(void)
{
char c;
Person p = {"li", "type", "hobbies", "detail"};
printf("%s",p.name);
scanf("%c", &c);
}
上面的例子是在头文件定义了一个记录或者结构体,然后在源程序中引用了这个记录或者结构体。
为了看懂上面的例子我做几点对比说明:
预处理对比
C
Erlang
包含
#include #include""
不能是路径
-include(File) File可以是绝对和相对路径
宏
#define 分为有参和无参
引用时,直接引用
-define(Const, Replacement), -define(Func(Var1, VarN), Replacement),引用时用?Const或?Func(Var2, VarN)
条件编译
#ifdef #else #endif
-ifdef(Macro) -ifndef(Macro) -else -endif.
看出Erlang和C语言的预处理还是很相似的,最大的不同在于#和-,其它在用法上有些小的区别,多注意下就好了。