【发布时间】:2015-01-30 12:09:28
【问题描述】:
我正在将一个使用 ATL/MFC 的 Visual C++ 项目从 VS2010 迁移到 VS2013。该项目使用/J 进行编译(“假设char 是未签名的”),并且有太多代码可能会或可能不会依赖该事实来轻松删除编译器标志。
在 VS2013 下,/J 导致 atldef.h 中的编译器错误:ATL doesn't support compilation with /J or _CHAR_UNSIGNED flag enabled。这可以通过定义_ATL_ALLOW_UNSIGNED_CHAR 来抑制。 Microsoft 提到了这个in the MSDN documentation for /J,以及模糊的声明:“如果您将此编译器选项与 ATL/MFC 一起使用,可能会生成错误。虽然您可以通过定义 _ATL_ALLOW_CHAR_UNSIGNED 来禁用此错误,但此解决方法不受支持并且可能并不总是工作。”
有谁知道在什么情况下使用_ATL_ALLOW_CHAR_UNSIGNED是安全或不安全的?
【问题讨论】:
-
无法回答您的问题,但对于您自己的非 ATL 代码,
#define和#undef是否可行? -
#define和#undef究竟是什么? -
#define和#undef _CHAR_UNSIGNED完全一致。这就是/J选项的作用。或者也许 .. MS Connect says "/J 开关控制 char 的符号性。设置定义是传递 /J 的副作用,因为它由 limit.h 使用,但只是设置宏不会改变 char 的行为” 这更令人担忧。
标签: visual-c++ visual-studio-2013 mfc atl