c - #176-D expression has no effect”警告,当我创建一个函数指针数组时。这是怎么回事?

标签 c pointers embedded command-line-interface uart

我无法理解发生了什么。我正在为一个使用德州仪器微 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/

相关文章:

c - 使用指针算术反转字符串

c++ - 用于查找指针何时超出范围的程序和技术

C 嵌入式系统堆栈和堆大小

c - 与 openssl 库交叉编译时 undefined reference 错误

创建包含字符串的静态 C 结构

c - 如何处理枚举常量

c++ - 使用 Win32 API 监控电池电量

pointers - 如何在不使用反射的情况下优雅地在 golang 中动态调用方法?

c - 用于嵌入式应用的音频 (MP3) 编解码器

c++ - 来自 QT 的 Octave : undefined reference