篇首注:此文乃一年多前写就,其中可能有不正确的认识。现在借 CSDN 处新瓶装旧酒,供还在学习和使用 Symbian 的人员参考。

今天心情好,所以再来批评一下 Symbian。其实这些问题可能 Nokia 有更大的责任,不过既然 Symbian 是基础结构么,说它也不为过。

1、纵观所有版本的 SDK,没有一个头文件里有可以标识 SDK 版本(或者操作系统版本,或者 UI 平台版本)的宏定义。
这种短视的行径长期没有得到改观。如果你想写一份在不同的 SDK 中都能正常编译的代码,简直就是困难重重。你一定想用预定义宏来区分,可是你一定会被显示撞的头破血流。一个名叫 e32ver.h 的头文件看起来好象是做这个用途的,可是打开一看你就会傻眼,里面不是宏定义,而是 const int。我想写这个头文件的工程师的大脑一定是被所谓的“纯 C++”或者“纯 OO”之类的茅草塞满了,看到宏就会下意识地写为 const int,完全不知道这些数值应该有什么用以及会怎么样被别人使用。

Nokia S60 三版的 SDK 里,include/variant 目录里有个文件,针对相关的平台定义了一系列的东西,但是,这个文件的文件名里竟然有版本号信息!这就意味着你需要分清楚 SDK 版本之后才能包含到正确的文件上,而不能达到用它来帮助你分清楚 SDK 版本的目的!

2、mmp 文件中不支持自定义库文件路径。
你没有任何办法在 mmp 文件中指定所依赖的库文件的搜索路径,尽管编译环境调用到的链接器最终无一例外都支持这一特性。LIBRARY 关键字是不支持绝对路径的,而相对路径的起点就是 SDK 的库文件所在路径。这就意味着,如果你有自己的库需要链接进来,那你就只能很愚蠢地把它们复制到 SDK 的库文件所在路径下,抱歉,也没有便利的编译后清理设施,日积月累,你的 SDK 会成为一个巨大的垃圾场。

3、愚蠢的 _LIT 宏
你想这样使用 _LIT 吗:

#define STR_HELLO_WORLD "Hello, world!"
_LIT(KStrHelloWorld, STR_HELLO_WORLD);

很对不住,编译器会罢工,告诉你第二参数有问题。老汉一时手痒,所以写了下面的解决方案(一个 litfix.h 头文件):

#ifndef __LITFIX_H__
#define __LITFIX_H__

#ifdef _LIT
#undef _LIT
#endif

#if defined(_UNICODE)
#define __TSTR(x) L ## x
#else
#define __TSTR(x) x
#endif

//
// NOTE:
// Now, you can use _LIT macro as following:
//
// #define STR_HELLO_WORLD "Hello, world!"
// _LIT(KStrHelloWorld, STR_HELLO_WORLD);

//
// You can NOT use anothor string macro as the second parameter
// in the original _LIT.
//

// #define _L(a) (TPtrC((const TText *)__TSTR(a))
// #define _S(a) ((const TText *)__TSTR(a))

#define _LIT(name, s) /
static const TLitC<sizeof(__TSTR(s)) / sizeof(TText)> name = /
{ sizeof(__TSTR(s)) / sizeof(TText) - 1, __TSTR(s) }

#endif // __LITFIX_H__

使用的时候在 cpp 中把它包含到其他所有的头文件之后就可以了。可能是由于上面已经提到过的原因,Symbian 的工程师对于宏的使用,只能算是入门级的水平。如果谁要是不相信,还可以去看看可变参数相关的那一干宏(VA_XXX)的实现,保管你不止大跌眼镜,而是大跌眼睛……

不好意思,话题有大有小,精粗并杂,日后再整理。

未完待续。下面是不完全/不确定的目录:
4、无处不在的白痴 UID3(看它是如何影响复用的)
5、过度 OO 设计(去看看系统的消息体系吧)
6、复杂的安全模型(哦,是我见过的最安全的设计了……)
7、糟糕的模拟器(你见过它的几种死法?)
8、弱智的桌面扩展体系(Desktop/Idle/Home/Tel,随便你怎么叫他)
9、WSD 和 Cleanup Stack(已经被无数人诟病,这里提一下权当充数)

Symbian 的缺陷(一)相关推荐

  1. Symbian 应用程序签名指南 和 Symbian Signed 认证指南

    本文介绍了Symbian签名的购买和安装,已经Symbian Signed认证的方法. 本文转自WoSign公司网站:http://trustcenter.wosign.com/support/Sym ...

  2. Symbian OS 精要

    一般诀窍 1.'Symbian 开发师网络'提供大量信息资源,协助您为 Symbian OS 操作系统编写应用程序.您应经常访问 www.symbian.com/developer 网站以便获取最新的 ...

  3. Symbian日薄西山了么

      当初对着IPHONE与NOKIA X700,安卓还是塞班,这是个问题...最终选了X700.众人都说它将被淘汰,但同时意味着它的成熟.     塞班真的有致命不可突破的缺陷么?真的失去了持续开发的 ...

  4. Android设计缺陷--无法通话录音

    这个问题在Google Code之Android上讨论 了快一年,还没解决.这成为不少人无法从Symbian系统转移到Android系统的主要原因. Android手机搭配有强大的硬件,具有很多实用和 ...

  5. Symbian Skill

    编码诀窍 以下是您在编写代码时应该记住的一些一般诀窍. 1. 确保您的应用程序能够对系统关机事件做出响应.在您的AppUi::HandleCommandL()方法中,必须要对EEikCmdExit(以 ...

  6. 3G争霸战由诺基亚收购Symbian开始

    文/项有建 6月25日,就在Symbian成立10周年之际,诺基亚宣布将出价2.64亿欧元(约合4.1亿美元)收购Symbian剩余52%股份,并将与其他顶级手机生产商.AT&T.NTTDoC ...

  7. TVM适配NN编译Compiler缺陷

    TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 i. 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 i. 缺陷一:SRAM配置灵活性差 ii. 缺陷二 ...

  8. 基于U-Net图像分割的划痕缺陷分割(课程设计)

    基于U-Net的划痕缺陷分割(课程设计) 论文:**U-Net: Convolutional Networks for Biomedical Image Segmentation** https:// ...

  9. 零代价修复海量服务器的内核缺陷——UCloud内核热补丁技术揭秘

    下述为UCloud资深工程师邱模炯在InfoQ架构师峰会上的演讲--<UCloud云平台的内核实践>中非常受关注的内核热补丁技术的一部分.给大家揭开了UCloud云平台内核技术的神秘面纱. ...

最新文章

  1. python 迷宫边界,用python解决迷宫
  2. python线程池及其原理和使用
  3. python主流版本-python主流版本
  4. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )
  5. 下述程序有什么问题?
  6. 【NOIP模拟题】“与”(位运算)
  7. 开篇 — 【面向对象设计模式学习】
  8. JDK 12,合并的收集器和命名的挑战
  9. css知识笔记(五)——css样式设置小技巧
  10. 实战 RocketMQ 流量削峰,怎么能错过这一篇!
  11. Python学习入门基础教程(learning Python)--5.3 Python写文件基础
  12. 强大的代码编辑工具:Nova for mac v7.3中文版
  13. win10用不了计算机一级,教你一招解决Win10计算器打不开的问题
  14. 【福利】邀请博主,赢取大奖
  15. 洛谷P1526 智破连环阵
  16. Spring Cloud深入浅出
  17. Genesis公链加速区块链行业发展
  18. Java专题 Java使用第一步 环境搭建JDK及JRE(含多版本JDK切换思路)
  19. linux系统手柄模拟器下载,Switch Amiibo模拟器(Windows|Linux PC + JoyControl + Bluetooth)...
  20. 【2015NOIP普及组】T4:推销员 试题解析

热门文章

  1. 微软MSE的离线更新方式
  2. 电脑回收站删除的文件如何找回呢?
  3. linux不设置网关,关于设置网关的问题,刚使用linux不太明白啊...
  4. 20230501-win10-制作U盘启动盘-firpe
  5. 英特尔Nick McKeown:5G的意义远超智能手机
  6. windows vc下播放音乐的方法包括wav,mp3格式
  7. 转载 科大讯飞jh再裁员 员工称公司管理混乱、产品质量差
  8. c语言判断一个数是不是质数的n次方,c语言实践 判断一个数是不是素数
  9. python 使用随笔
  10. 4750G geforce gt 520m ubuntu 10.04显卡驱动