QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1965|回复: 4

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

[复制链接]
发表于 2006-9-27 11:34:41 | 显示全部楼层 |阅读模式
/***********************************************************************************
*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" 和 } ------------是什么意思?
还请帮帮忙!
谢谢了!
发表于 2006-9-27 16:18:52 | 显示全部楼层
简单的说就是按C方式编译链接这段代码
回复

使用道具 举报

 楼主| 发表于 2006-9-27 21:45:19 | 显示全部楼层
谢谢!

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

使用道具 举报

发表于 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++混用,你不必担心这个。
回复

使用道具 举报

发表于 2006-12-12 13:57:10 | 显示全部楼层
简单的说就是为了实现C和C++的混合编程。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-20 20:17 , Processed in 0.075592 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表