为什么 GCC 警告我这一行是 "misleadingly indented as if it were guarded by" if?
Why is GCC warning me this line is "misleadingly indented as if it were guarded by" an if?
警告是:
/home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:48:5: warning:
this ‘if’ clause does not guard... [-Wmisleading-indentation]
if (toHexSize < 1)
^~
/home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:51:2: note: ...
this statement, but the latter is misleadingly indented as
if it were guarded by the ‘if’
MapTileSizeAtZoom = toHexSize;
^~~~~~~~~~~~~~~~~
代码是这样的:
if (toHexSize < 1)
toHexSize = 1;
MapTileSizeAtZoom = toHexSize;
如果 MapTileSizeAtZoom ...
行缩进更多,我可能会误导它,但它与 'if' 的缩进级别相同,所以这对我来说似乎是正确的。
我以为可能有多余的空格 and/or 制表符浮动,但我删除了文本后任何不需要的空白字符,这没有什么区别。
我想可能是被空行搞糊涂了,但是去掉并没有停止警告
此外,在同一个 .cpp 文件中,它之前是这段代码,它没有警告:
if (toHexSize < 1)
toHexSize = 1;
HexInfo centerOnHex;
if (SelectedHex.type != -1)
为什么它会(完全)警告一个,为什么不警告另一个,无论这是否是 GCC 错误,我该怎么做才能避免它?
代码
#include "HexMap.h"
#include <algorithm>
#include <cmath>
//--------------------------------------------------------------
HexMap::HexMap()
{}
//--------------------------------------------------------------
int HexMap::SetZoom(int toHexSize)
{
if (toHexSize < 1)
toHexSize = 1;
HexInfo centerOnHex;
if (SelectedHex.type != -1)
{
// Center map on the selected hex.
centerOnHex = SelectedHex;
}
else
{
// Center map on current center of viewpoint.
centerOnHex = GetHex(
MapFrame.x + MapFrame.getWidth() / 2,
MapFrame.y + MapFrame.getHeight() / 2 );
if ((centerOnHex.x > WORLDMAPWIDTH) || (centerOnHex.x < 0))
centerOnHex.x = WORLDMAPWIDTH / 2;
if ((centerOnHex.y > WORLDMAPHEIGHT) || (centerOnHex.y < 0))
centerOnHex.y = WORLDMAPHEIGHT / 2;
}
setHexDisplaySize(toHexSize);
// Center map:
HexOriginX = MapFrame.x + MapTileWidth * 0.25f;
HexOriginY = MapFrame.y + MapTileHeight * 0.5f;
ViewPosOnWorld.set(
centerOnHex.x - (MapFrame.getWidth() / 2) / MapTileWidth,
centerOnHex.y - (MapFrame.getHeight() / 2) / MapTileHeight);
return 0;
}
//--------------------------------------------------------------
void HexMap::setHexDisplaySize(int toHexSize)
{
if (toHexSize < 1)
toHexSize = 1;
MapTileSizeAtZoom = toHexSize;
MapTileWidth = MapTileSizeAtZoom * 1.5f; // hex x-spacing is 1.5 * r
MapTileHeight = MapTileSizeAtZoom * 1.73205f; // hex height = sqrt(3*r)
// Size images & hexmask:
MaskWidth = MapTileHeight * 1.154700538; // 1/(sqrt(3)/2)
}
有 space 用于缩进条件第 49 行,但 制表符 用于缩进第 51 行.
GCC 将制表符视为 8 spaces。编译器错误地认为它与 if 语句对齐,即使在编辑器中看起来并非如此。这是与白色 space 缩进保持一致的另一个原因(例如,避免在源代码中使用任何制表符)。
警告是:
/home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:48:5: warning:
this ‘if’ clause does not guard... [-Wmisleading-indentation]
if (toHexSize < 1)
^~
/home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:51:2: note: ...
this statement, but the latter is misleadingly indented as
if it were guarded by the ‘if’
MapTileSizeAtZoom = toHexSize;
^~~~~~~~~~~~~~~~~
代码是这样的:
if (toHexSize < 1)
toHexSize = 1;
MapTileSizeAtZoom = toHexSize;
如果 MapTileSizeAtZoom ...
行缩进更多,我可能会误导它,但它与 'if' 的缩进级别相同,所以这对我来说似乎是正确的。
我以为可能有多余的空格 and/or 制表符浮动,但我删除了文本后任何不需要的空白字符,这没有什么区别。
我想可能是被空行搞糊涂了,但是去掉并没有停止警告
此外,在同一个 .cpp 文件中,它之前是这段代码,它没有警告:
if (toHexSize < 1)
toHexSize = 1;
HexInfo centerOnHex;
if (SelectedHex.type != -1)
为什么它会(完全)警告一个,为什么不警告另一个,无论这是否是 GCC 错误,我该怎么做才能避免它?
代码
#include "HexMap.h"
#include <algorithm>
#include <cmath>
//--------------------------------------------------------------
HexMap::HexMap()
{}
//--------------------------------------------------------------
int HexMap::SetZoom(int toHexSize)
{
if (toHexSize < 1)
toHexSize = 1;
HexInfo centerOnHex;
if (SelectedHex.type != -1)
{
// Center map on the selected hex.
centerOnHex = SelectedHex;
}
else
{
// Center map on current center of viewpoint.
centerOnHex = GetHex(
MapFrame.x + MapFrame.getWidth() / 2,
MapFrame.y + MapFrame.getHeight() / 2 );
if ((centerOnHex.x > WORLDMAPWIDTH) || (centerOnHex.x < 0))
centerOnHex.x = WORLDMAPWIDTH / 2;
if ((centerOnHex.y > WORLDMAPHEIGHT) || (centerOnHex.y < 0))
centerOnHex.y = WORLDMAPHEIGHT / 2;
}
setHexDisplaySize(toHexSize);
// Center map:
HexOriginX = MapFrame.x + MapTileWidth * 0.25f;
HexOriginY = MapFrame.y + MapTileHeight * 0.5f;
ViewPosOnWorld.set(
centerOnHex.x - (MapFrame.getWidth() / 2) / MapTileWidth,
centerOnHex.y - (MapFrame.getHeight() / 2) / MapTileHeight);
return 0;
}
//--------------------------------------------------------------
void HexMap::setHexDisplaySize(int toHexSize)
{
if (toHexSize < 1)
toHexSize = 1;
MapTileSizeAtZoom = toHexSize;
MapTileWidth = MapTileSizeAtZoom * 1.5f; // hex x-spacing is 1.5 * r
MapTileHeight = MapTileSizeAtZoom * 1.73205f; // hex height = sqrt(3*r)
// Size images & hexmask:
MaskWidth = MapTileHeight * 1.154700538; // 1/(sqrt(3)/2)
}
有 space 用于缩进条件第 49 行,但 制表符 用于缩进第 51 行.
GCC 将制表符视为 8 spaces。编译器错误地认为它与 if 语句对齐,即使在编辑器中看起来并非如此。这是与白色 space 缩进保持一致的另一个原因(例如,避免在源代码中使用任何制表符)。