C++ 在另一个使用引用和参数的函数中调用函数
C++ Calling function inside another function that uses references and parameters
我在 Arduino IDE(基本上使用 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);
...
}
或
int global_par1;
int global_par2;
void funcA(int par1, int par2)
{ ... use par1 and par2 ... }
void funcB()
{
...
funcA(global_par1, global_par2);
...
}
在第一种情况下你只使用局部变量,而在第二种情况下你使用全局变量。
不同之处在于,在全局情况下(请在 funcA
和 funcB
中以不同的方式称呼它们,因为可能存在可读性问题)变量对于整个程序是唯一的(即如果你在 main
中修改它们,你甚至会在函数中修改它们),而在本地情况下,你只是在处理它们的本地副本。
在我看来,由于这些变量确定了位置(这是唯一的),我会采用完全全局的解决方案,即
int global_par1;
int global_par2;
void funcA()
{ .. use global_par1 and global_par2.. }
void funcB()
{
...
funcA();
...
}
我在 Arduino IDE(基本上使用 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);
...
}
或
int global_par1;
int global_par2;
void funcA(int par1, int par2)
{ ... use par1 and par2 ... }
void funcB()
{
...
funcA(global_par1, global_par2);
...
}
在第一种情况下你只使用局部变量,而在第二种情况下你使用全局变量。
不同之处在于,在全局情况下(请在 funcA
和 funcB
中以不同的方式称呼它们,因为可能存在可读性问题)变量对于整个程序是唯一的(即如果你在 main
中修改它们,你甚至会在函数中修改它们),而在本地情况下,你只是在处理它们的本地副本。
在我看来,由于这些变量确定了位置(这是唯一的),我会采用完全全局的解决方案,即
int global_par1;
int global_par2;
void funcA()
{ .. use global_par1 and global_par2.. }
void funcB()
{
...
funcA();
...
}