delphi到c/objective c的转换(100)

  • 主题发起人 主题发起人 yeskert1
  • 开始时间 开始时间
Y

yeskert1

Unregistered / Unconfirmed
GUEST, unregistred user!
工作中的总结,不完善,希望大家补充:1、标准c没有var类型的参数,只能用指针代替2、标准c也没有pointer类型, 用int或者 void *代替。3、在标准c中, typedef struct s1 {int i,ii;
} s2;
实际上是一种简写,展开的写法是: struct s1 {int i,ii;
};
typedef s1 s2;
因此,此时定义变量,可以这样定义: struct s1 v1;
或者 s2 v1;4、c中没有fillchar函数,但是有bzero和memset函数5、标准c中没有function和procedure关键字。6、c中取地址是用&而delphi用@7、delphi的shl,c中对应的是<<,shr对应的是>>8、delphi的and对应的&&,or对应的||9、c中指针定义与使用: 用*而非^。 定义的格式:类型* 变量;
使用的方式:*变量 例:int* p;
int i=6;
p=&i;
*p=8;//此时i也等于810、c中结构体成语与成员的地址——继续前面定义了的结构体,现在定义结构体指针: s2* p1;
如何访问其成员? (*p1).i 如何取得成员i的地址? 方法:&(*p1).i 11、delphi的十六进制以$开头,而c是0x开头12、c没有byte,对应的是char或者unsigned char; 但objective 有Byte,注意第一个字母大写 c也没有word,对应的是unsigned short int; c没有longword或者dword,对应的是unsigned int; c没有cardinal,对应的是unsigned int; int是32位的(objective c,标准c是不是32位不记得了),因此用它对应pointer也可以,因为c没有pointer。13、随机数,objective-c中,随机数不用初始化。 arc4random返回一个4个字节的无符号的整数14、c不支持结构体变量的赋值,比如 s2 v1,v2;
... v1=v2;是不允许的 objective-c好像也不行!只能是内存拷贝或者一一赋值。 memcpy(&a, &b, sizeof(a));15、获得当前进程id windows下,GetCurrentProcessId函数可以得到进程ID。 在macOS下有个GetCurrentProcess,通过参数返回一个8个字节的唯一标识号(64位),但是在iOS上好像不能使用。 iOS上有个NSProcessInof的对象,它的唯一的静态函数可以获得当前的进程信息,而其属性processIdentifier是一个int类型的唯一标识。16、这是最容易出错的:相等判断是两个等号,一个就是赋值了哦。 如:if(i=1){语句1;} 这样语句1必然执行。 应该是if(i==1){语句1;}17、这也是一个容易出错的: delphi的case写法: case 表达式 of 分支条件1:语句1;
分支条件2:begin
... end;
end;
c的是switch,语法: switch(表达式) { case value1: 语句1; 语句2; break; case value2: 语句3; 语句4; break; } 有几点要注意: a、switch的写法很想函数定义似的,要括号、要花括号; b、每个分支下可以放置多个语句而不必花括号,加也没关系; c、每个分支的最后应该是break,否则继续执行下个分支,看来最后一个分支的最后可以不必。 另外,对于相同值,delphi的写法是很简洁的: case 表达式 of v1,v2,v3..v100: end;
但,c中不能这样写,要改成: switch(表达式) { case v1:case v2: case v3..v100://----1 语句1; 豫剧2; break; } 或者 switch(表达式) { case v1:;case v2: ;case v3..v100://----2 与1比,多了分号 语句1; 豫剧2; break; } 18、常量定义 delphi的:const s=100;
c中:#define s 100 注意,没有等号,也没有分号。 但是,delphi的常量初始化值是可以是表达式的,比如 delphi的 const s=100;
const s1=s+1;
c中,可以这样定义: #define s1 s+1 但这样不安全,最好变成 #define s1 (s+1) 因为define是字符串级的替换,没有计算能力。因为必须清楚,s1/2想表达的是s+1/2还是(s+1)/219、delphi的pointer可以用void *对应;20、c有alloca和allocmem,但alloca是用栈,移植性不是很好,而且作为参数传递也有问题 很多时候,直接用char[]就可以。可能很多错误,敬请指教和补充。
 
是送分莫
 
分真这么重要么?我怎么觉得没啥用!
 
后退
顶部