primary_lg 发表于 2006-9-27 11:34:41

一个C语言头文件实例问题

/***********************************************************************************
*File: examlib.h
*desc: function declare and common define
************************************************************************************/
#ifndef _44BLIB_H_
#define _44BLIB_H_
//下面的条件编译到底做了些什么,extern "C" { 在这里是什么意思?结尾处也//有一个同样的条件编译......
#ifdef _eplusplus
extern "C" {
#endif

//紧接着的是一些常量定义:
#define ONESEC0 (62500)
#define ONESEC1 (31250)
#define NULL 0
#define EnterPWDN(clkcon) ((xoid(*)(int))0xe0)(clkcon)
.
.
.
//下面是一些函数原型的定义:
void Delay(int time);
void DelayMs(int ms_time);
.
.
.
//下面这个就是跟开头一样的一个条件编译:
#ifdef _cplusplus
}
#endif

#endif       /******_44BLIB_H_*******/



--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
我是一个初学者,对上面头文件实例中的两个条件编译看不明白。
到底其中的--------extern "C" 和 } ------------是什么意思?
还请帮帮忙!
谢谢了!

mozilla 发表于 2006-9-27 16:18:52

简单的说就是按C方式编译链接这段代码

primary_lg 发表于 2006-9-27 21:45:19

谢谢!

这么说这两个条件编译是用在编译/链接时区别C和C++的.

snnn 发表于 2006-10-24 12:05:13

楼主用过C++没有?
C++允许重载。
这意味着,两个函数可以有不同的body但是有相同的函数名称。
例如
int func(int);
int func(int,int);

但是编译的时候怎么办呢?
不同的过程当然必须是不同的名称,不然怎么跳转?
于是每个函数后面都会被加上很多字符,变成
func@ASDHIUHFUSD#SDF1 这样的形式。
而对于一个C程序而言,不需要这么做。
extern "C"就是告诉编译器,按照C的方式,不要这么做!
如果你的代码不是C/C++混用,你不必担心这个。

fengxiao_hh 发表于 2006-12-12 13:57:10

简单的说就是为了实现C和C++的混合编程。
页: [1]
查看完整版本: 一个C语言头文件实例问题