免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2119 | 回复: 7
打印 上一主题 下一主题

[C] .h文件的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-05 09:55 |只看该作者 |倒序浏览
c 语言初学者.
现在对.h文件有一些困惑,期待大家的解惑.
----------------------------------------------------------
问题描述:
环境: win2k /Linux
compile: tc2
如:
#include <ctype.h>
后在程序中可以使用tolower() 函数.
在ctype.h文件中有:
#define _tolower(c) ((c) + 'a' - 'A')
int _Cdecl tolower(int ch);

在linux 下,我看了ctype.h文件:
1种. 直接定义 tolower() --MACRO--
2种. static inline unsigned char __tolower(unsigned char c)
{
if (isupper(c))
c -= 'A'-'a';
return c;
}
#define tolower(c)  __tolower(c)   .有了这个就很好理解,没什么问题
----------------------------------------------------------

我的疑惑:
在 windows中 程序如何通过tolower() 调用到了_tolower()?!
我目前知道的是,c的函数调用会有几种不同的方式(_Cdecl,stdcall之类), 代码编译后函数名称会变成
_MethodName().
如果是通过因为编译后名称 变成 _MethodName()的话, 我自己写个.h文件 使用这种方式,同样的环境
my.h
#define _mytool(c) ((c) + 'a' - 'A')
int _Cdecl mytool(int ch);
,却不能编译通过.提示定义的函数mytool()未定义,排除了头文件包含路径不对的情况.
如果直接引用_mytool()就可以正常工作.

[ 本帖最后由 PninoH 于 2007-11-5 10:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-11-05 18:03 |只看该作者
up

论坛徽章:
0
3 [报告]
发表于 2007-11-10 03:52 |只看该作者
加上
#define mytool(c) _mytool(c)
不就可以了么?

论坛徽章:
0
4 [报告]
发表于 2007-11-15 12:27 |只看该作者

回复 #3 mymtom 的帖子

首先谢谢您.

您说的这个方法我知道,正如上面说的 linux中的.h文件.

我的困惑是 tc中的ctype.h文件中没有使用这种方法,但编译是可以通过. 我不知道到底是如何实现的.
andytodd 该用户已被删除
5 [报告]
发表于 2007-11-15 13:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2007-11-18 21:55 |只看该作者
C函数库内部是 implementation-defined,各实现有自己的处理方法……
和 __cdecl 无关

论坛徽章:
0
7 [报告]
发表于 2007-11-21 12:43 |只看该作者
谢谢大家

论坛徽章:
0
8 [报告]
发表于 2007-11-21 15:16 |只看该作者
别的文件里定义过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP