c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值

标签 c++ linux c++11 cross-compiling

我有一个 C++ 项目,我在我的机器上使用 g++ 编译(编译到“主机”)和使用交叉编译器的 ARM 处理器(在我的例子中是 arm-cortex_a8 -linux-gnueabi-g++)。我正在转换为 C++0x/11 标准,编译初始化列表时出现错误,我可以在以下代码段中重现该错误:

int main(void) {
    char c[1] = {-108};
}

这个程序看起来是正确的,因为 -108char 的合法值。 使用 g++ 编译它不会产生以下命令行错误:

g++ example.cc -std=c++0x

但是,当我使用交叉编译器进行编译时,如下所示:

arm-cortex_a8-linux-gnueabi-g++ example.cc -std=c++0x

我收到以下错误:

example.cc: In function 'int main()':
example.cc:2:22: error: narrowing conversion of '-0x0000000000000006c' from 'int' to 'char' inside { } [-fpermissive]

由于值是合法的,这似乎是一个错误。你能解释一下为什么我会收到这个错误以及如何解决它吗?

编辑:请注意,使用正值(例如,108)是合法的,不会导致两个编译器都出错。

最佳答案

当您将变量声明为 char 时,无论它是有符号还是无符号,都取决于实现。如果您需要能够存储负值,则应显式声明 signed,而不是依赖实现定义的默认值。

signed char c[1] = { -108 };

关于c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634962/

相关文章:

c++ - 如何从 C++ 中的 txt 文件输出。该文件有一两行

c++ - 如何将匿名 C++ union 与匿名结构一起使用

c++ - Google测试-生成用于模板类实例化的值

c++ - 使用 scipy.weave.inline 将大整数从 Python 传递到 C/C++

php - 通过php运行并口控制程序

在 linux 中从内核模块控制鼠标指针

linux - x-www-browser GET 变量

c++ - std::map 中的用户定义类:二进制表达式的无效操作数

c++ - 使用 std::max 比较两个 double 是否安全?

c++ - 有没有办法消除这种歧义?