是否可以在 MSVC 中对隐式浮点到布尔转换发出警告?

问题描述

在这个例子中,我希望 MSVC 发出警告:

auto func(float f) -> int {
  if(f) { return 654321;} // true if f != 0.0F
  else { return 123456; }
}

所以我不得不写:

auto func(float f) -> int {
  if(f != 0) { return 654321;}
  else { return 123456; }
}

是否可以让 MSVC 对第一个示例中的隐式转换发出警告?

解决方法

不,MSVC 中没有这样的警告选项。您可以通过使用 #!/usr/bin/env python # -*- coding: UTF-8 -*- import wx class MainFrame(wx.Frame): def __init__(self,*args,**kwds): kwds["style"] = kwds.get("style",0) | wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self,**kwds) self.SetSize((463,300)) self.txtPassword = wx.TextCtrl(self,wx.ID_ANY,"",style=wx.TE_PASSWORD) self.txtPasswordShow = wx.TextCtrl(self,"") self.btnShowPassword = wx.Button(self,"Show") self.btnHidePassword = wx.Button(self,"Hide") self.__set_properties() self.__do_layout() # Same event handler: self.btnShowPassword.Bind(wx.EVT_BUTTON,self.OnBtnShowHidePass) self.btnHidePassword.Bind(wx.EVT_BUTTON,self.OnBtnShowHidePass) def __set_properties(self): self.SetTitle("frame") self.SetBackgroundColour(wx.Colour(185,230,255)) # These widgets are hidden at the beginning: self.txtPasswordShow.Hide() self.btnHidePassword.Hide() def __do_layout(self): #main default sizer: sizer_1 = wx.BoxSizer(wx.VERTICAL) #layout sizer: grid_sizer_1 = wx.FlexGridSizer(1,2,0) # We add all the widgets (hidden and visible) to the appropriate BoxSizer: grid_sizer_3 = wx.BoxSizer(wx.HORIZONTAL) grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL) grid_sizer_2.Add(self.txtPassword,0) grid_sizer_2.Add(self.txtPasswordShow,0) grid_sizer_1.Add(grid_sizer_2,1,wx.EXPAND,0) grid_sizer_3.Add(self.btnShowPassword,0) grid_sizer_3.Add(self.btnHidePassword,0) grid_sizer_1.Add(grid_sizer_3,0) sizer_1.Add(grid_sizer_1,wx.ALL | wx.EXPAND,10) self.SetSizer(sizer_1) self.Layout() def OnBtnShowHidePass(self,event): # If it is visible,we hide it: if self.btnShowPassword.IsShown(): self.btnShowPassword.Hide() self.btnHidePassword.Show() self.txtPassword.Hide() self.txtPasswordShow.Show() # We pass the data from one widget to another to keep it: self.txtPasswordShow.SetValue(self.txtPassword.GetValue()) else: self.btnShowPassword.Show() self.btnHidePassword.Hide() self.txtPassword.Show() self.txtPasswordShow.Hide() self.txtPassword.SetValue(self.txtPasswordShow.GetValue()) self.Layout() class MyApp(wx.App): def OnInit(self): self.frame = MainFrame(None,"") self.SetTopWindow(self.frame) self.frame.Show() return True if __name__ == "__main__": app = MyApp(0) app.MainLoop() which enables all warnings 编译您的示例来验证这一点,并查看没有发出警告。

然而,Clang 中有一个这样的警告选项:-Wfloat-conversion。文档说浮动到整数,但 it includes bool