winterw 发表于 2017-1-10 22:04:33

请问哪位知道c函数的默认返回值是怎么规定的?

下面的代码运行后所打印的值应该是随机的吧?

security 发表于 2017-1-10 22:31:36

本帖最后由 security 于 2017-1-10 22:41 编辑

说实话,我不知道 c 标准是怎么规定的。
因为我不会忘记 return,要做到编译 0 warnings,也就没这疑虑。
不过,如果是 arm 的话,
按 arm 的规则来讲,返回值是存在 r0 寄存器里的。
你这样的代码,你可以查看汇编代码,看看 r0 寄存器的值。

yuyu87 发表于 2017-1-10 22:40:58

可以通过编译??????

security 发表于 2017-1-10 22:44:01

yuyu87 发表于 2017-1-10 22:40
可以通过编译??????

要求不严格的话,可以编译过,报 warning。
可以将 warning 提升为 error,这样就编译不过了。

cock 发表于 2017-1-11 05:19:38

本帖最后由 cock 于 2017-1-11 05:20 编辑

如果是X86的处理器,返回值保存在AX中,AX的内容与返回前执行的语句有关,得看汇编才能确定。但前一个test_function的警告楼主是如何处理的?

makesoft 发表于 2017-1-11 08:52:36

这种问题的意义何在?

chun2495 发表于 2017-1-11 08:59:09

探索这样的问题毫无意义

winterw 发表于 2017-1-11 10:15:16

这是我在看alsa-lib-1.0.24.1中的源码时遇到的问题,不知道它的目的是啥?
具体位置为 alsa-lib-1.0.24.1/src/conf.c 的line666
static int get_nonwhite(input_t *input)
{
int c;
while (1) {
    c = get_char_skip_comments(input);
    switch (c) {
    case ' ':
    case '\f':
    case '\t':
    case '\n':
    case '\r':
      break;
    default:
      return c;
    }   
}
}


static int parse_defs(snd_config_t *parent, input_t *input, int skip, int override)
{
int c, err;
while (1) {
    c = get_nonwhite(input);
    if (c < 0)
      return c == LOCAL_UNEXPECTED_EOF ? 0 : c;
    unget_char(c, input);
    if (c == '}')
      return 0;
    err = parse_def(parent, input, skip, override);
    if (err < 0)
      return err;
}
return 0;
}

security 发表于 2017-1-11 10:20:50

winterw 发表于 2017-1-11 10:15
这是我在看alsa-lib-1.0.24.1中的源码时遇到的问题,不知道它的目的是啥?
具体位置为 alsa-lib-1.0.24.1/s ...

get_nonwhite 都有返回值。
那个 break 只是跳出 case,并没有跳出 while (1)。

winterw 发表于 2017-1-11 10:26:18

security 发表于 2017-1-11 10:20
get_nonwhite 都有返回值。
那个 break 只是跳出 case,并没有跳出 while (1)。

卧槽,多谢啊,我这两天好像脑子坏掉了,都想去撞墙了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
你们都别笑我啊。

security 发表于 2017-1-11 10:30:19

winterw 发表于 2017-1-11 10:26
卧槽,多谢啊,我这两天好像脑子坏掉了,都想去撞墙了。。。。。。。。。。。。。。。。。。。。。。。。 ...

可以理解,
我们不可能一直都是满血满状态的。
问题解决,有收获就好。
页: [1]
查看完整版本: 请问哪位知道c函数的默认返回值是怎么规定的?