GCC允许隐式int到指针转换?
Posted
技术标签:
【中文标题】GCC允许隐式int到指针转换?【英文标题】:GCC allowing implicit int to pointer conversion? 【发布时间】:2014-05-05 22:46:43 【问题描述】:所以我错误地将 int
传递给函数参数,期望指向 const 对象的指针,我从 GCC 收到了这个警告:
jni/../../../Source/Controller/UserExperienceManager.cpp: In member function 'void CUserExperienceManager::SendUXPToPOS(Types::CString)':
jni/../../../Source/Controller/UserExperienceManager.cpp:243:78: warning: invalid conversion from 'int' to 'const WebService_POSAgent::CDataCheck*' [-fpermissive]
jni/../../../../../Core/WebServices/Services/POSAgent/POSAgent.h:80:18: warning: initializing argument 2 of 'CEvent& WebService_POSAgent::CPOSAgent::AddUserExperienceID(Types::CString, const WebService_POSAgent::CDataCheck*, Types::CString)' [-fpermissive]
我试图为此创建一个可重现的示例,但我无法做到,也无法在此处分享太多代码。我在 MSVC9 上编译了同样的东西,它正确地给了我一个错误。我只是感到震惊,我没有从 GCC 得到错误!有谁知道为什么?下面是一些简单的sn-ps:
函数声明(类成员函数):
CEvent& AddUserExperienceID(CString userExperienceId, CDataCheck const* check, CString requestId = REQUEST_ID);
函数调用站点:
int nCheckNum = /*some value*/;
CPOSAgent::Instance().AddUserExperienceID(m_UserExperienceId, nCheckNum);
【问题讨论】:
gcc 警告你你做错了什么,-fpermissive
是启用-禁用此警告的选项的名称。使用-Wall -Werror
,你会很安全
如果您需要直接在代码中对警告/错误设置进行“微调”,您也可以查看this page。
是什么让你首先使用-fpermissive
?了解您正在使用的工具。不要只是从别人的 makefile 中剪切和粘贴。那是货物崇拜编程。它会给你带来麻烦。
【参考方案1】:
您正在编译带有 -fpermissive
集的代码,这会将错误降级为警告。
-fpermissive
Downgrade some diagnostics about nonconformant code from errors to warnings.
Thus, using -fpermissive will allow some nonconforming code to compile.
What does the fpermissive flag do?
【讨论】:
很有可能 - 警告消息实际上告诉我们他使用了 -fpermissive 标志。 :-)以上是关于GCC允许隐式int到指针转换?的主要内容,如果未能解决你的问题,请参考以下文章
ARC 不允许将 Objective-C 指针隐式转换为“void *”
ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”