首页 > 解决方案 > 编译成功,但 VS 显示红色波浪线。C中具有不同参数的函数指针

问题描述

我正在使用带有 VisualGDB 的 Visual Studio 2019 社区为基于嵌入式 ARM 的项目 (STM32) 编写“C”。VisualGDB 显示其错误报告使用默认的 gnu11 标准。

编辑:我让这段代码更完整了一点:

typedef int(*CMD_Type)();
int CMD_0() {  return 0; }
int CMD_1(float val) {     return 1; }
int CMD_2(float val1, float val2) {    return 2; }
int DoSomething ()
{
    CMD_Type c = CMD_1;
    if (c == CMD_2)
    {
        return c(1, 2);
    }
}

我在“==”下得到红色曲线,表示它Cannot apply binary '==' to <anonymous> (*)()> and <anonymous>(*)(int)

当我用两个参数调用它时,我也会在两个参数下得到红色的波浪c线:函数有零个参数,但被调用>有两个。

这编译没有错误并且有效。

我的理解是,即使CMD_Type类型定义为指向返回整数且不接受任何参数的函数的指针,它也只是指向函数的指针,并且任何参数都会被推送到堆上,因此可以正常工作。所以我明白为什么编译器/智能感知在抱怨。

  1. 这个可以吗?
  2. 如果它仍然编译,我可以关闭这个警告吗?

仅供参考:我继承了这段代码:)。

任何帮助,将不胜感激。

谢谢-埃德

标签: carmvisualgdb

解决方案


推荐阅读