struct abc
{
//some members
}arrayOf[10];
struct def
{
//some data memebers
}obj;
typedef void (*abc) (obj)
我不确定语句 typedef void (*abc) (obj)
暗示什么。请考虑我是新手。
最佳答案
即使忽略丢失的分号,也没有任何意义;这是一个错误。
如果 obj
是类型名称,它将定义 abc
作为类型 void (*)(obj)
的别名,即,作为一个函数的指针,该函数采用 obj
类型的单个参数并返回 void
。
但由于 obj
是一个对象名称,而不是类型名称,所以这实际上不是它的意思。
当我用 gcc 编译它时,我得到一个警告:
warning: parameter names (without types) in function declaration
当我使用 -pedantic-errors
编译时,警告变成 fatal error 。
旧式(非原型(prototype))函数定义可以合法地为参数指定名称,但不能指定类型:
void old_style_func(obj)
/* obj is implicitly of type int */
{
}
但该形式对于函数声明 无效。在声明中,括号之间的单个标识符必须是类型名称,而不是参数名称——这使声明成为原型(prototype)。
gcc 的错误消息暗示它试图将它解释为旧式定义的开始,然后决定它是无效的,因为它只是一个声明。
底线是您应该密切注意编译器警告。
我们可以推测意图。也许 obj
是一个类型名称,而这个:
struct def
{
//some data memebers
}obj;
应该是:
typedef struct def
{
// some data members
} obj;
或者可能是不小心遗漏了类型名称,最后一行应该是:
typedef void (*abc) (struct def obj);
虽然在那种情况下,名称 obj
被用于不同目的两次(合法,但令人困惑)。但如果没有更多上下文,就不可能确定如何“修复”它。
这段代码是从哪里来的?您确定已经向我们展示了确切的代码吗?当您尝试编译它时发生了什么?
关于c - c中的这个语句是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220744/