C++ 中将默认变量类型设置为 int 的任何选项
Posted
技术标签:
【中文标题】C++ 中将默认变量类型设置为 int 的任何选项【英文标题】:Any option in C++ to set default variable type to int 【发布时间】:2012-07-30 08:52:16 【问题描述】:是否有任何选项省略变量类型或将变量类型设置为在 c++ 代码中int
用 linux 中的 g++ 编译器编译。
const bufLen = 2000;
在 solaris 中编译很顺利(因为我正在从 solaris 移植到 linux)。
还有一件事,我无法控制文件,因为它是由某些解析器生成的(由某些第三方以二进制形式提供)
由于我无法更改 c++ 文件(因为它是在每次编译前生成的),我需要一些(g++ 的)选项,以便我可以在编译期间包含以抑制/解决错误:
error: ISO C++ forbids declaration of `bufLen` with no type
编辑:
INFO:我目前使用的选项-c -fPIC -Wno-deprecated -m32 -O2 -ffriend-injection -g
是否有任何选项给我带来麻烦(或影响其他人)?
提前致谢
【问题讨论】:
您确定它是 C++(而不是 C)文件吗? C89 允许省略int
。
你能把它编译成C代码吗?换句话说,使用 C 编译器而不是 C++ 编译器。
@Makesh 你能向负责产生这些废话的人投诉吗?它可能是非常旧的软件,所以机会可能很小,但这是最好的做法......
自己“预处理”文件并进行正则表达式查找/替换并不难,所以 const x = y;变为 const int x = y;
你试过 -fms-extensions 吗?
【参考方案1】:
感谢 AndersK 为我提供了解决方案(通过 cmets [在我的问题下方])
我尝试使用 -fms-extensions
和 g++ 进行编译,这解决了我的问题
参考:http://gcc.gnu.org/onlinedocs/gcc-3.4.4/gcc/C-Dialect-Options.html
PS:为了可见性,我在答案部分添加了答案。积分归实际回答的人:)
【讨论】:
意识到使用 -fms-extensions 编译代码的讽刺意味了吗? -fms-extensions 添加到 gcc 以支持 Microsoft 特定的语言扩展 (gcc.gnu.org/ml/gcc-patches/1999-08n/msg00363.html)。我严重怀疑您从 Solaris 移植到 Linux 的原始代码中是否包含与 Microsoft 相关的任何内容。我的猜测是,真正的问题是代码生成器正在生成 C 代码,而您的问题是您正在使用 C++ 编译器编译 C 代码。正如其他人所指出的那样,只需更改编译器选项以告诉 gcc 使用 C 编译器。【参考方案2】:试试-ansi
或-std=c89
。 http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/C-Dialect-Options.html
【讨论】:
如果文件确实包含 C++(而不是纯 C)代码,那将不起作用。 在这种情况下,如错误消息所述,它不是 iso comform c++ 代码 @Paranaix:这就是我的编译方式:/usr/bin/g++ xyz.cc -c -fPIC -Wno-deprecated -m32 -O2 -ffriend-injection -g -I/some_inc_dirs - o xyz.o ... 会有帮助吗??以上是关于C++ 中将默认变量类型设置为 int 的任何选项的主要内容,如果未能解决你的问题,请参考以下文章