C - 函数没有返回值?

时间:2011-03-22 21:38:28

标签: c

我在头文件中定义了以下方法

unsigned char test(void);

实现:

unsigned char test()
{
  unsigned char value = 0xFF;
  return value;    
}

当我用它来称呼它时:

 unsigned char temp;
 temp = test();

什么都没有?我用断点来介绍它。在最后,变量值的值为0xFF,但它永远不会返回到temp?

我不熟悉旧的C ...只有C ++,在声明方法方面可能会有某种细微的差别。

任何帮助都将非常感谢!!!

4 个答案:

答案 0 :(得分:6)

我认为你只看到一个聪明的编译器。如果在赋值后从未使用过您的变量,那么它就会被优化掉。尽管如此,仍然会调用该函数的可能副作用。

如果将变量更改为全局变量,则编译器无法知道您不会使用它,因此它会进行赋值。

我认为,如果您在作业后添加printf或声明tmp变量volatile,您也会在调试器中观察到该作业。

答案 1 :(得分:2)

确定调试器没有用户错误? 大多数调试器在实际执行赋值之前,不会显示变量“temp”的值,直到下一行代码。

答案 2 :(得分:2)

如果启用了优化,temp可能会保留在寄存器中,有时调试器将无法找到并显示这些值。实际上,如果您不在任何地方使用它,编译器可以很好地丢弃返回值。确保编译代码时没有进行任何优化以进行调试。

或者,使用男性已知的最旧方法进行调试:printf。 :)

答案 3 :(得分:0)

函数调用已被编译器优化掉了,编译器注意到你对temp没有任何作用,你的函数调用没有副作用,所以它优化了它。

尝试在temp = test();之后添加printf,编译器将不再执行相同的优化。