请教几个c转pascal的语句写法 ( 积分: 120 )

  • 主题发起人 主题发起人 wenning
  • 开始时间 开始时间
W

wenning

Unregistered / Unconfirmed
GUEST, unregistred user!
请哪位DFW能不能把下面三个语句转成pascal

typedef unsigned short dType;
#define DTCount ((((unsigned long) 1)<<(8 * sizeof(dType)))-1)

extern integer needExp;
#define doExp(D) (needExp ? doExpRec(D) : (exp(-D)))

unsigned long *dRect[MAXR+ 1];
int opt[3];
if (dRect[opt][j] &amp
(1 << k)) printf (&quot;%3d&quot;, k);
 
这个涉及到两种语言的不同实现机制.有些不能死搬.
//typedef unsigned short dType;
Type
dType = WORD;

const
DTCount = (1 shl (8*sizeof(dType))) -1;
//extern integer needExp;
//Delphi中共享的变量无需落后的extern 直接在单元的interface段声明全局变量,只要引用这个单元就能访问这个变量
//#define doExp(D) (needExp ? doExpRec(D) : (exp(-D)))
//Delphi中这种宏有两种实现方式,1.变成函数.2用.INC文件实现替换.(本质上后一种方式才严格对应C中的宏)
//我不知道你的doExpRec是什么函数.这里先不给实现了


//unsigned long *dRect[MAXR+ 1];

Type
DWORDS = array[0..0] of DWORD;//C中数组和指针有时是等价的.虽然编译器优美角度看极其丑陋
PDWORDS = ^DWORDS
//为了适应这种丑陋我定义一个无符号证书的数组指针,为了越界访问方便
TdRect = array[0..MAXR] of PDWORDS;
var
dRect : TdRect;

//int opt[3];
var
opt : array[0..2] of integer;
//if (dRect[opt][j] &amp
(1 << k)) printf (&quot;%3d&quot;, k);
if (dRect[opt][j] and (1 shl k))<>0 then
write(Format('%.3d',[k]));//Write要控制台程序


另外楼主选的都是C中特有的概念,Delphi翻译可能烦琐一点.
请楼主给出比这个更简洁高效的C语法.嘿嘿.
if i in [0..1,3..100,102,105,200..3000] then
MessageBox(0,'','',0);
 
呵呵,你那个,只是实现这样一次就完的话应该没有更简洁的了,大量使用而且范围有改变的话,可以定义一个大数(如512位什么的),一次判断就是进行一次位操作

第二个其实是个优化exp运算的宏
特别谢谢第三个,我看错了还以为是位操作呢,看了你写的才发现是指针操作

问题已经完结,

能不能加个小问题
UINT *cPtr;
for(i = 0
!cPtr
i++)
中的!cPtr是什么意思

有没有看到,答不答都行,明天我就结贴了,请其他人别答这个问题,不然我会很不好意思的
 
!cPtr 应该是cptr<>nil
 
呵呵
唉,pascal都很久没碰过了,更别说c了,一大堆基本的东西的都忘了
只好在wr960204那里减一点分了
 
后退
顶部