我正在使用带有 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
类型定义为指向返回整数且不接受任何参数的函数的指针,它也只是指向函数的指针,并且任何参数都会被推送到堆上,因此可以正常工作。所以我明白为什么编译器/智能感知在抱怨。
- 这个可以吗?
- 如果它仍然编译,我可以关闭这个警告吗?
仅供参考:我继承了这段代码:)。
任何帮助,将不胜感激。
谢谢-埃德