[晴 2006/12/16 01:00 | by turbozv ]
告别人工编译时代,嘿嘿~ grin
@echo off

set VERSION=V2.2

set VCBUILD_PATH=D:\Program Files\Microsoft Visual Studio 8\VC\vcpackages
set EVC3_PATH=D:\Program Files\Microsoft eMbedded Tools\Common\EVC\Bin
set WINRAR_PATH=C:\Program Files\WinRAR

rem =======================================================================

set PATH=%VCBUILD_PATH%;%WINRAR_PATH%;%EVC3_PATH%;PATH

echo "Preparing building envirnment..."
rd /s /q HandCalendar
unrar x HC_Release.rar
copy festivals.txt HandCalendar
copy README.txt HandCalendar

echo "Building PPC2002..."
set FILENAME=HandCalendar.%VERSION%.PPC2002.rar
evc HandCalendar.vcw /MAKE ALL /REBUILD
rar a %FILENAME% HandCalendar
evc HandCalendar.vcw /MAKE ALL /CLEAN

echo "Building PPC2003..."
set FILENAME=HandCalendar.%VERSION%.PPC2003.rar
vcbuild "HandCalendar.vcproj" /r "Release|Pocket PC 2003 (ARMV4)"
vcbuild "todayPlugin\TodayPlugin.vcproj" /r "Release|Pocket PC 2003 (ARMV4)"
rar a %FILENAME% HandCalendar
vcbuild "HandCalendar.sln" /c

echo "Building WM5..."
set FILENAME=HandCalendar.%VERSION%.WM5.rar
vcbuild "HandCalendar.vcproj" /r "Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
vcbuild "todayPlugin\TodayPlugin.vcproj" /r "Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
rar a %FILENAME% HandCalendar
vcbuild "HandCalendar.sln" /c

echo "Cleaning..."
rd /s /q HandCalendar
rd /s /q ARMRel
rd /s /q "Pocket PC 2003 (ARMV4)"
rd /s /q "Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"

echo "Done..."
[晴 2006/12/10 00:23 | by turbozv ]
无线电是我除了Programming外的另一大爱好。小时候装过晶体管收银机,虽然当时并不懂得原理,但是对无感改锥调中周,对示波器印象非常深刻。 呵呵,后来我学的不是电子,不过私下却非常喜欢摆弄一些电子的东西。

GBA卡带的电池又没有电了,今天idle,于是把它"做"了(黑社会老大在做人?)

1、行动前准备好一切工具(嗯?请相信自己的眼睛,它不是长得像珊瑚的电烙铁支架,而确实是一个珊瑚-_-!)
点击在新窗口中浏览此图片

2、今天要做的对象--曾经被我"做"过的EZCard(汗……)
[晴 2006/11/13 01:33 | by turbozv ]
根据ISO/IEC 14882:2003(E)对C++的标准定义来看,第15页到19页,一个integer后缀可以为:
uU, fF, lL

不过,微软扩展了一些后缀:
http://msdn2.microsoft.com/en-us/library/00a1awxf.aspx
iN (N=8, 16, 32, 64), LL, ll

比如:-1i16, 256i32等等……


让人疑惑的是这个iN。

对于iN的修饰的整型长度为N位,比如sizeof(0i8), sizeof(0i16), sizeof(0i32), sizeof(0i64) 的值分别为1, 2, 4, 8。

你可以将i8理解为(char), 所以 0i8 == (char)(0)。 (当然ui8就是unsigned char, 0ui8 == (unsigned char)0)

请看下面程序:
int a;
1)a = 256i8;
2)a = char(256);
3)char c = 256; a = c;


全部都是等价的操作。


那么,为什么微软要加这样一个定义呢?

来看看常用的地方:
#define _I32_MIN (-2147483647i32-1) /* minimum signed 32 bit value */
#define _I32_MAX 2147483647i32 /* maximum signed 32 bit value */
#define _UI32_MAX 0xffffffffui32 /* maximum unsigned 32 bit value */

我个人感觉就是避免了一个显式转换而已,其实也可以定义为:
#define _I32_MIN (int32_t)(-2147483647-1) /* minimum signed 32 bit value */
#define _I32_MAX (int32_t)2147483647 /* maximum signed 32 bit value */
#define _UI32_MAX (uint32_t)0xffffffff /* maximum unsigned 32 bit value */


HOHO~

再来看个例子:
int a = -32768i16;
问A等于多少?

要搞清楚这个问题就要知道运算符的优先顺序,"-"是修饰32768还是修饰32768i16的。试验的结果是后者。
所以 -32768i16 被编译器理解为 -(32768i16)。所以 a = -((short)(32768));

不过编译器不支持 (-32768)i16,因为()是表达式了,而i只能修饰定义的常量…… sweat

还有一个很让人疑惑的地方就是:
char a = 1i32;
int a = 1; b = a;


把编译开关设置为 /W4,结果是第一行没有产生警告信息,第二行有丢失数据的警告信息。 我想到的原因就是,常量赋值的时候,编译器很容易做结果检查,所以就自动帮程序员转换成正确的类型了。(你可以试试 char a = 128i32; 就会产生警告信息)。

结论:Compiler is smart enough!
分页: 45/68 第一页 上页 40 41 42 43 44 45 46 47 48 49 下页 最后页 [ 显示模式: 摘要 | 列表 ]