C++ C++;在使用引用和参数的另一个函数内调用函数

C++ C++;在使用引用和参数的另一个函数内调用函数,c++,c,function,arduino,arduino-ide,C++,C,Function,Arduino,Arduino Ide,我在ArduinoIDE(基本上使用C++)编程,在调用另一个函数时遇到了麻烦。代码部分如下: unsigned long int deslocamento (char sentido, byte &cont, const int pino, unsigned long int posicaoA) { byte leitura; unsigned int deltaposicao; leitura = digitalRead(pino); if ((leitura =

我在ArduinoIDE(基本上使用C++)编程,在调用另一个函数时遇到了麻烦。代码部分如下:

unsigned long int deslocamento (char sentido, byte &cont, const int pino, unsigned long int posicaoA)
{
  byte leitura;
  unsigned int deltaposicao;

  leitura = digitalRead(pino);

  if ((leitura == HIGH) && (cont == 0))
  {
    cont = 1;
  }

  if ((leitura == LOW) && (cont == 1))
  {
    cont = 0;

    deltaposicao++;
  }

  if (sentido == 'F')
  {
    posicaoA += deltaposicao;
  }

  else
  {
    posicaoA -= deltaposicao;
  }

  return posicaoA;
}

void zeramento (unsigned long int posicaoA)
{
  byte pwm = 255;
  char sentido = 'R';

  byte fator;

  fator = fatorcorrecaoP (pwm);

  while (posicaoA != 0)
  {
    posicaoA = deslocamento (sentido, cont, pinencoder, posicaoA);

    posicaoA -= fator;

    comando (sentido, pwm);
  }
}
在函数“void zeramento”中,我是否应该将函数“unsigned long int deslocamento”使用的所有输入(参数)声明为输入,或者使用更简单、更短(或者更有效的内存优化)的方法?例如,我应该声明为“void zeramento(posicaoA、sentido和cont、pinecoder)”吗


谢谢大家,有什么问题我很抱歉。我是新来的,还在学英语。

这取决于你想要达到的目标。对于较短的代码,我只调用函数
funcA
funcB
以及参数
par1
par2

你可以做任何一件事

void funcA(int par1, int par2)
{ ... use par1 and par2 ... }

void funcB(int par1, int par2)
{
    ...
    funcA(par1, par2);
    ...
}

在第一种情况下,您只使用局部变量,而在第二种情况下,您使用全局变量

不同之处在于,在全局情况下(请在
funcA
funcB
中以不同的方式调用它们,因为可能存在可读性问题),变量对于整个程序是唯一的(即,如果在
main
中修改它们,即使在函数中也会修改它们),而在本地情况下,您只是在处理它们的本地副本

在我看来,由于这些变量确定了位置(这是唯一的),我会选择一个完全全局的解决方案,即

int global_par1;
int global_par2;

void funcA()
{ .. use global_par1 and global_par2.. }

void funcB()
{
    ...
    funcA();
    ...
}

我不能理解这个问题。我省略了其余的代码,但我会尽力描述它。这是ATMEGA操作切割机的代码。机器有许多用户输入,如速度和操作长度。它返回到确定的位置,然后返回。它还有很多其他功能,比如内存处理。两者中的第一个(“deslocamento”)根据移动方向、编码器传感器的最后位置和读数确定机器的实际位置。第二个仅在启动时执行,用于将机器移动到零位置,这取决于打开时的位置。为什么?由于posicaoA指的是最后一个位置,函数“deslocamento”根据覆盖的距离更新posicaoA。我注意到这是一个全局变量,请尽量避免使用它们。这不是一个好理由,请将其作为参数传递。因此,正如我所说,我是否应该将其声明为void zeramanto(posicaoA,senido,&cont,pinecoder)?我想避免这样做,因为我已经必须为函数deslocamento指定所有这些参数。对我来说,它看起来模棱两可,所以我想如果你喜欢局部变量版本,它会有一个更合适的方法,是的。或者更好,我会称之为
void zeramento(char sentido,byte&cont,const int pino,unsigned long int posicaoA)
posicaoA
最后,只是为了两个函数都有相同的指纹-更具可读性)欢迎您,但是。。。你所说的“不完全如我所愿”是什么意思
int global_par1;
int global_par2;

void funcA()
{ .. use global_par1 and global_par2.. }

void funcB()
{
    ...
    funcA();
    ...
}