VS2015 编译预处理问题

VS C+++编译预处理问题

微软

编译器

编译平台:vs2015 update3,代码如下:
#ifdef _WIN64
inline uint16_t zBSF(unsigned long * Index,uint64_t x)
{
return _BitScanForward64(Index,x); //编译报错行
}
#endif
在编译目标平台选项设为x64的时候没有问题,但是设为x86的时候,报错,错误信息如下:
Error C3861 '_BitScanForward64': identifier not found
我已经做了#ifdef _WIN64预处理了,指示预编译在x86下不要处理这段代码了啊,怎么感觉好像编译器不予理睬一般。这种预处理,我在其他地方用的很多,没有出现过什么问题。这个_BitScanForward64按微软说法是编译器内嵌函数,但是这又如何?指明了不要处理,为啥还处理,跪求求大神指点
不好意思,囊中空空,没有C币悬赏了啊
编译命令行所有选项:
/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\CPPTEST.pch"
链接命令行所有选项:
/OUT:"D:\VS\CPPTEST\Debug\CPPTEST.exe" /MANIFEST /NXCOMPAT /PDB:"D:\VS\CPPTEST\Debug\CPPTEST.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"D:\VS\CPPTEST\Debug\CPPTEST.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\CPPTEST.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

1个回答

unsigned char _BitScanForward(
   unsigned long * Index,
   unsigned long Mask
);
unsigned char_BitScanForward64(
   unsigned long * Index,
   unsigned __int64 Mask
); 

官方函数已经给出了32和64的不同使用方式。。。

phelps_pass
phelps_pass 问题核心不是这个函数如何用,是为什么预编译处理没有期望的结果
3 年多之前 回复
phelps_pass
phelps_pass 这个知道的,就是因为有两种形式,使用起来不方便,要把它形式同一,32为编译32位的,64位编译64位的
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐