C语言:max函数

flowingfirefly 2011-11-21 04:24:49

/* a.c */

#ifdef INT
typedef int DataType
#endif
#ifdef FLOAT
typedef float DataType
#endif
DataType max(DataType x, DataType)
{
return x > y ? x: y;
}



/* b.c */

#include <stdio.h>
#include "a.c"

int
main()
{
#define INT
printf("max = %d\n", max(4, 3));
#undef INT
#define FLOAT
printf("max = %f\n", max(3.14, 3.15));
#undef FLOAT
return 0;
}


烦请大家看下,这个是否能实现(编译时不通过,这个我知道,我现在想知道的是如何实现以上的代码所描述的功能).

嘿嘿。。。
由于分数不足了,所以另一个问题也一起问了,如下:

sizeof(int) = sizeof( 任意数据类型的指针)是偶然还是必然?
...全文
1782 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
llovzy 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 flowingfirefly 的回复:]

引用 4 楼 anyidan 的回复:

引用 1 楼 mscf 的回复:
实现两个函数吧,你用预编译控制只能得到其中的一种版本



要么用macro


我问的问题中只是一个简单的例子,可是很多函数都很复杂,macro如何能胜任啊。但是无论如何,都谢谢姐姐了!

我的第二个问题真正想知道的是系统整数的字节数与其寻址能力有何关系、当系统的字长为32位时,为什么指……
[/Quote]

内存的每个存储单元都是被编了号的,这个号就是内存地址,指针里存放的就是内存的地址,那么内存地址用多少位来表示呢,32位的系统就用32位来表示,为了直观我们都用16进制表示,类似0x12345678。他的寻址范围就是0-2^32-1,也就是4G,所以32位的系统最多只支持4G内存,多了没用,系统定位不到那一块(以前是这样子的,现在好像有什么方法可以支持超过4G)

为什么不用2byte,因为2bype的寻址范围只有0-2^16-1,也就是64k,超过这个范围系统就找不到了
ref_var 2011-11-21
  • 打赏
  • 举报
回复
现在大多数的CPU是32根地址总线的
flowingfirefly 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anyidan 的回复:]

引用 1 楼 mscf 的回复:
实现两个函数吧,你用预编译控制只能得到其中的一种版本



要么用macro
[/Quote]

我问的问题中只是一个简单的例子,可是很多函数都很复杂,macro如何能胜任啊。但是无论如何,都谢谢姐姐了!

我的第二个问题真正想知道的是系统整数的字节数与其寻址能力有何关系、当系统的字长为32位时,为什么指针变量的字节数是4Byte,为什么不是2Byte或者其他什么Byte,谢谢大家了!
a707000646 2011-11-21
  • 打赏
  • 举报
回复
这个可以
[Quote=引用 5 楼 anyidan 的回复:]
sizeof(int) = sizeof( 任意数据类型的指针)是偶然还是必然?

偶然, 不记得有任何标准说 int 类型正好可以表示寻址范围
[/Quote]
AnYidan 2011-11-21
  • 打赏
  • 举报
回复
sizeof(int) = sizeof( 任意数据类型的指针)是偶然还是必然?

偶然, 不记得有任何标准说 int 类型正好可以表示寻址范围
AnYidan 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mscf 的回复:]
实现两个函数吧,你用预编译控制只能得到其中的一种版本
[/Quote]


要么用macro
ryfdizuo 2011-11-21
  • 打赏
  • 举报
回复
sizeof(int) = sizeof( 任意数据类型的指针)
====
32位的机器地址都是4个字节。
薛定谔之死猫 2011-11-21
  • 打赏
  • 举报
回复
sizeof(int) = sizeof( 任意数据类型的指针)是偶然还是必然?

=============

和主机字长有关系,32位下是必然的
薛定谔之死猫 2011-11-21
  • 打赏
  • 举报
回复
实现两个函数吧,你用预编译控制只能得到其中的一种版本

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧