我无法理解发生了什么。我正在为一个使用德州仪器微 Controller 的小型机器人开发命令行界面,我的一位教授推荐了一个函数指针数组,所以我就这样做了。我的代码可以编译,但我收到警告:
#176-D expression has no effect uartconsole.c
这是我的函数我的函数:
void startConsole(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
Configure_UART1();
// Enables port, sets pins 1-3 (RGB) pins for output
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
unsigned char *input;
void (*p[4])(unsigned char);
p[0] = forward;
p[1] = reverse;
p[2] = left;
p[3] = right;
/* printf goes to the UART com port */
printf("\f======== Welcome to the Console ========\n");
printf("Enter a command followed by return.\n"
"Type help for a list of commands.\n\n");
/* Loop forever receiving commands */
while(true) {
/* Get the user's input */
if(UARTCharsAvail(UART_BASE)) {
input = UARTCharGet(UART_BASE);
switch(*input) {
case 'fo':
(*p[0]);
case 're':
(*p[1]);
case 'le':
(*p[2]);
case 'ri':
(*p[3]);
default:
UARTPutString(UART_BASE, "\nCommand Unknown\n\r");
}
}
如何修复此警告?我已经查阅了以前关于函数指针的 Stackoverflow 帖子,但我不明白为什么这仍然给我错误。
最佳答案
(*p[0])
指定p[0]
指向的函数。它不调用函数。要调用该函数,您必须应用括号和参数,如 (*p[0])(*input)
一样。在没有函数调用的情况下,语句 (*p[0]);
只是一个函数指示符,在不执行任何操作的情况下被丢弃,因此编译器警告您这不是您的意思做。
关于c - #176-D expression has no effect”警告,当我创建一个函数指针数组时。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125476/