Code Bye

error C2169: '_InterlockedAnd64' : intrinsic function, cannot be defined

 

c++

>C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(5423): error C2169: “”_InterlockedAnd64″” : intrinsic function, cannot be defined
编译一个工程,在win32下编译可以通过,切换到X64下就报了一大堆错,为首的是上面那个,google了一下也没有找到相关的解决办法,都是是和系统内部函数重命名了,但是我全局搜了一下函数名字,发现只用系统文件里有啊,自己写的文件都没有重名,so,只能发到网上求各位大神帮助拉~~~急,在线等!!!!先谢谢了~~

20分

这个指令在 _M_IA64 被定义时,被指示成是指令了。
是不可以被 #define 修改的。
而你工程中,可能使用了 #define 定义了这个。
试试使用宏屏蔽掉。
你是说 _InterlockedAnd64 在我项目里被#define 重定义了么??我全局搜了一下 没有啊
那里看看这个函数在哪里被定义了。这个函数是指令,不可以自己定义的。
x86 系统没有这个函数的,所以可能是宏定义,或者自己定义成函数,仅仅为了兼容。
x64 和 Arm 系统,都是指令。

20分

两个windows的头文件有冲突了

把包含这个变量的头文件的顺序换一下。

引用 1 楼 Saleayas 的回复:

这个指令在 _M_IA64 被定义时,被指示成是指令了。
是不可以被 #define 修改的。
而你工程中,可能使用了 #define 定义了这个。
试试使用宏屏蔽掉。

不过我发现在她报错的地方有几个#define 但是是系统文件 winnt.h
#define InterlockedAnd64 _InterlockedAnd64
#define InterlockedAnd64Acquire _InterlockedAnd64
#define InterlockedAnd64Release _InterlockedAnd64
#define InterlockedAnd64NoFence _InterlockedAnd64

引用 4 楼 lovesmiles 的回复:

两个windows的头文件有冲突了

把包含这个变量的头文件的顺序换一下。

可是是哪两个windows 头文件呢?我工程里没有显示引用到报错的winnt.h

找一下看看有没有winsock的头文件。

我记得winsock的文件有二个版本,如果包含顺序不对,也会报这种错。

如果没有,就仔细找一下是谁引到winnt.h的,对比一下

#define InterlockedAnd64Acquire _InterlockedAnd64

这句代码,有没有被宏开关控制,找一下这个宏开关是怎么定义的,理一下头文件的顺序应该就可以了

引用 7 楼 lovesmiles 的回复:

找一下看看有没有winsock的头文件。

我记得winsock的文件有二个版本,如果包含顺序不对,也会报这种错。

如果没有,就仔细找一下是谁引到winnt.h的,对比一下

#define InterlockedAnd64Acquire _InterlockedAnd64

这句代码,有没有被宏开关控制,找一下这个宏开关是怎么定义的,理一下头文件的顺序应该就可以了

真的是没有用到winSock 和 winnt.h 这两个 文件。我已经定位到一个文件 只要不使用他就可以了,但是还是没有研究出来为什么不能用,但是为什么win32就能编译过 改成X64 就不行了呢~头文件真是个神奇的东西

终于解决了。我来总结一下哈。
问题:一个Solution中有两个Project,假设为A和B,B中用到了A里面的文件,然后在x64下编译会报上面的错误。
解决办法:如图就是在那个Preprocessor Definitions中加上_M_IA64。
总结:出现问题的时候有想过是工程的某个变量没有设置好,但是由于自己基础薄弱,最后还是请教了大神才解决了。感觉自己太小白了,恩~~要好好学习~~
最后,感谢以上各个楼层的朋友的帮忙哈~~~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明error C2169: '_InterlockedAnd64' : intrinsic function, cannot be defined