关于返回值的基本C问题

时间:2009-11-09 20:54:11

标签: c

我正在学习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。)

谢谢!

7 个答案:

答案 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的补码,以便将其存储到存储器中。