我正在学习C并且正在使用xCode(不确定它是否重要)。这段代码:
#include <stdio.h>
int main (int argc, const char * argv[]) {
int myInt;
myInt = 2;
myInt *= ( (3*4) / 2 ) - 9;
printf("myInt = %d", myInt);
return myInt;
}
输出:
Session started at 2009-11-09 15:51:15 -0500.]
myInt = -6
The Debugger has exited with status 250.The Debugger has exited with status 250.
printf是对的,但返回的是
A)将其包裹起来,
B)两次显示结果? (澄清一下,如果我放return 0;
,它只打印一次“调试器已退出”行,值为0。)
谢谢!
答案 0 :(得分:10)
返回代码被shell解释为无符号整数,范围为0-255。
答案 1 :(得分:2)
在Unix中,程序的返回值被限制在0-255范围内(是的,main的返回类型是int,但这是历史异常)。在exit status上查看此GNU文档。
对于“调试器已退出状态为250”的消息显示两次,该消息来自正在运行命令的进程,因此您无法控制它。
答案 2 :(得分:0)
我假设xcode将退出状态视为00-FF(0-255),在这种情况下-6 = 250
答案 3 :(得分:0)
检查exit()
和_Exit()
上的man page:
这两个函数都是低阶八阶 状态参数的位可用 到父进程[...]
答案 4 :(得分:0)
下面的包装(如你所描述的)是因为无法输出LF(换行)字符作为调用printf()的一部分。您可以通过将 \ n 添加到打印格式字符串来解决此问题。将您的代码更改为:
#include <stdio.h>
int main (int argc, const char * argv[]) {
int myInt;
myInt = 2;
myInt *= ( (3*4) / 2 ) - 9;
printf("myInt = %d\n", myInt);
return myInt;
}
至于加倍'调试器已退出状态250'。这是IDE /调试器的功能,而不是代码的结果。正如其他人所解释的那样,-6 = 0xFFFFFFFA,当被截断为8位并被视为无符号时,等于250的十进制数。
答案 5 :(得分:0)
除非出错,否则main的返回码应为0。这是unix中的常见约定,并且不会伤害Windows中的任何内容。 http://en.wikipedia.org/wiki/Main_function_%28programming%29
答案 6 :(得分:0)
-6表示为二进制的2的2的补码,以便将其存储到存储器中。