【问题标题】:Why my non void function in C not working ? "mode" is a variable in my program and when i call the function " Inc ( mode ) " nothing happen [closed]为什么我在 C 中的非 void 函数不起作用? “mode”是我程序中的一个变量,当我调用函数“Inc(mode)”时,什么也没有发生[关闭]
【发布时间】:2022-01-15 09:13:19
【问题描述】:
//increment variables between high & low limits , temp variable , m high limit 
    int Inc ( unsigned char temp , unsigned char m )
    {
      temp++ ;
      if (temp == m)
      temp = 0 ; 
      return ( temp ) ;
    }

【问题讨论】:

  • 请使用stackoverflow.com/editing-help 提供有用的minimal reproducible example。还请阅读How to Ask 并再次使用tour。你似乎错过了很多……
  • 是什么让您认为它不起作用? MRE 可以演示,但理想情况下,您还可以描述您观察到的内容并解释其中的问题所在。 Mayb 显示你得到的和你期望的对比。 “什么都没有发生”是您的全部描述,但是它太短而且不太可能。显示的代码肯定会做一些事情。我怀疑你没有显示的代码会误导你认为什么都没有发生。
  • 你有一个非空函数,它返回一些东西。在一个疯狂的猜测(因为你没有提供任何关于它的信息)你忽略了返回值。调用代码(我建议在此处显示)是否对返回的内容执行某些操作?
  • 您显示的代码有一个带有两个参数的原型。您在标题中描述的内容(描述应该顺便进入正文)只有一个参数。这样描述的代码(与您显示的代码相反)不应在没有错误或至少警告的情况下编译。 minimal reproducible example 会让每个人的事情变得更容易。

标签: c function void


【解决方案1】:

temp 参数是Inc 函数的本地变量。

你想要这个:

 void Inc ( unsigned char *temp , unsigned char m )
 {
   (*temp)++ ;
   if ((*temp) == m)
     (*temp) = 0 ; 
 }

 ...
 mode = 1;
 Inc(&mode, 10);
 // mode is 2 now

或者只是使用你原来的函数:

 mode = 1;
 mode = Inc(mode, 10);
 // mode is 2 now

我猜你的代码是这样的:

 mode = 1;
 Inc(mode, 10);  // calling Inc and ignoring the return value
 // mode is still 1 now

【讨论】:

  • 您可能已经猜对了问题的本质,但这一点都不清楚。 OP 的函数确实返回了递增的值,它提供了一种与您的修改版本所需的不同的可行使用模型。毕竟,问题标题确实明确指出它是一个非void 函数。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多