为什么会导致错误?
Why it causes an ERROR?
我在 CODEBLOCK 上用 C++ 编写了一个简单的程序。程序如下:
#include <iostream>
using namespace std;
int main()
{
int num = 09; //ERROR: Invalid digit 9 in octal constant
cout << num << endl;
num = 08; //ERROR: Invalid digit 9 in octal constant
cout << num << endl;
return 0;
}
此代码与上一个代码相同。但是我改变了值并写了 num=09 而不是 015.
我同意,如果我初始化 (int num = 015),它会以八进制输出 13。
但在上面的程序中,我尝试初始化(int num = 09 和 num = 08)它给出了错误,您可以看到。
首先,我想知道它为什么会产生错误以及如何产生错误?
其次是背后的逻辑是什么?
如果有的话,请给我合理的理由和合适的例子。
前导零导致整数在 C/C++ 中被解释为八进制数。八进制的 015 是 (1*8) + 5 = 13 的十进制。
8 进制常量就是这样定义的。 158 = 1310.
我在 CODEBLOCK 上用 C++ 编写了一个简单的程序。程序如下:
#include <iostream>
using namespace std;
int main()
{
int num = 09; //ERROR: Invalid digit 9 in octal constant
cout << num << endl;
num = 08; //ERROR: Invalid digit 9 in octal constant
cout << num << endl;
return 0;
}
此代码与上一个代码相同。但是我改变了值并写了 num=09 而不是 015.
我同意,如果我初始化 (int num = 015),它会以八进制输出 13。
但在上面的程序中,我尝试初始化(int num = 09 和 num = 08)它给出了错误,您可以看到。
首先,我想知道它为什么会产生错误以及如何产生错误?
其次是背后的逻辑是什么?
如果有的话,请给我合理的理由和合适的例子。
前导零导致整数在 C/C++ 中被解释为八进制数。八进制的 015 是 (1*8) + 5 = 13 的十进制。
8 进制常量就是这样定义的。 158 = 1310.