我唯一能想到的合理解釋就是為了方便 porting,例如為了 32bit 的執行檔,只是不知道這樣是否真有意義?反正我對這行業的 Code 早已經見怪不怪了XD
#include <stdio.h>
#include <Library/BaseLib.h>
int main(void)
{
unsigned long long a = 0x0000000000000001;
UINT64 b = LShiftU64(a, 2);
UINT64 c = a << 2;
printf("UEFI 0x%016llX, 0x%016llX \n", a, b);
printf("StdC 0x%016llX, 0x%016llX \n", a, c);
return 0;
}
執行結果
UEFI 0x0000000000000001, 0x0000000000000004
StdC 0x0000000000000001, 0x0000000000000004
後記
似乎真的是跟 porting 有關,在網路上找到 2 篇相關文章。
[edk2] [Patch] MdeModulePkg: use LShiftU64() instead of "<<" to avoid IA32 build error.
Fix ScsiLib build break by << operator, which is replaced by LShiftU64 of BaseLib.
沒有留言:
張貼留言