【发布时间】:2016-09-04 09:42:05
【问题描述】:
我有一个在两个平台上编译的 C++ 代码库,其中之一是 Visual C++ 2013。 第二个平台支持 C++03(而不是 C++11)。第二个平台的编译器中的枚举大小实现是使用所需的最小大小。 VC++ 实现是使用 4 个字节,即使它们不需要。
我想让 VC++ 也将枚举编译为最小大小,而不修改代码。例如,另一个编译器不会编译这个:
enum MyEnum : unsigned char {};
我进行了搜索,但找不到支持此功能的编译器标志。 它们存在吗?
【问题讨论】:
-
这上面写满了可怕的想法。
-
@CaptainObvlious 我可以想象,在不了解任何背景、要求或理性的情况下,您会觉得您有足够的数据来得出结论。它与问题本身的质量有什么关系?
-
是的,我可以得出结论,这有可能破坏很多东西。在全局范围内更改
enum的大小会影响一切。这意味着enum的定义在您的代码所期望的和原始代码所期望的之间更改。如果您是针对源代码构建的,那么如果您只是链接到库,那么问题就不那么明显了。如果期望大小,任何依赖它的代码都可能会中断。希望查看 allenum类型的使用情况,然后在您更新到较新的库时重新查看。 -
@CaptainObvlious 感谢您的 cmets。我完全了解这些。我的用途不是用于生产代码,而是用于分析嵌入式内存转储。所有代码都是我团队内部的。不涉及任何库。如果枚举大小可以不在全局范围内而是在文件级别上完成,那就更好了,但如果全局范围是编译器标志可以做的,那就这样吧。但是,我没有看到任何关于如何在编译器级别执行此操作的建议。
标签: c++ visual-c++ visual-studio-2013 enums c++03