小编jsr*_*ren的帖子

gcc抑制警告"太小而无法容纳所有值"

我需要使用作用域枚举,以便我可以将它们作为特定类型传递给我们的序列化程序.我给了enum成员的显式整数值Enum1.

我已将两个与上述描述相匹配的范围内的枚举放入一个位域中

enum class Enum1 {
    value1 = 0x0,
    value2 = 0x1,
    value3 = 0x2
};
enum class Enum2 {
    value1 = 0x0,
    value2,
    value3,
 // ...
    value14
};

struct Example {
    Enum1 value1 : 2;
    Enum2 value2 : 6;
}
Run Code Online (Sandbox Code Playgroud)

现在无论我在哪里使用该Example类型,我都会收到警告"'Example :: value1'太小而无法容纳'Enum1'的所有值",同样适用于Enum2.请注意,这不是我们所定义的值的情况下,我们不关心在所有与这些以外的值.

这在我们的构建过程中是一个非常严重的分心 - 项目庞大而复杂,我们不希望扫描其中的许多警告(并且有很多).

我找了一个GCC(G ++)标志来禁用特定的警告.有没有我可以通过命令行?理想情况下,如果可能的话,我会使用警告编译指示在本地禁用它.

此时几乎没有改变代码结构的余地,但我们确实可以删除这些虚假警告.

编辑:添加标识已更改的范围枚举.

c++ enums gcc suppress-warnings bit-fields

17
推荐指数
1
解决办法
1817
查看次数

Google App Engine从父文件夹导入库

所以我的目录结构看起来像这样:

\Project-Dir\
|- lib\
|  |- flask\
|  |- ...
|- module1_dir\
|  |- __init__.py
|  |- app.yaml
|  |- app.py
|  |- ...
|- module2_dir\
|  |- __init__.py
|  |- app.yaml
|  |- app.py
|  |- ...
|- ...
Run Code Online (Sandbox Code Playgroud)

app.py

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
Run Code Online (Sandbox Code Playgroud)

我在同一个根目录下有两个模块.它们一起部署到App Engine.他们也共享相同的库.这些库都非常强大,所以我试图将它们放在共享目录(lib)中.

我正在dev_appserver.py\Project-Dir\和传球两个.yamls.我sys.path的设置很好,包括lib\目录.然而沙盒似乎固执地坚持认为图书馆lib\ 不存在.

我确定我只是遗漏了一些像配置改变一样的东西.或者App Engine真的只是不支持这样的设置?

编辑:当我在外面运行它时,导入工作正常dev_appserver.py.

google-app-engine python-import google-app-engine-python

6
推荐指数
1
解决办法
550
查看次数