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 的任何选项的主要内容,如果未能解决你的问题,请参考以下文章

c++ 阅读笔记

c++ 阅读笔记

c++ 阅读笔记

如何在 C++ 中将 Int 转换为 String,反之亦然(不使用像 sstream 这样的库)

如何在Javascript中将选定选项设置为默认选择

无法在 phpmyadmin 中将默认 INT 值设置为 1