c - c中的这个语句是什么意思?

标签 c pointers struct typedef

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/

相关文章:

c - 具有二维数组段错误的结构在写入时

c - 运行函数的指针,其中变量是结构的变量

c - 在 Xcode 中编译程序后,如何绘制输出数据?

c - 如何在C中将a字符串拆分为单独的单词,其中空格不恒定?

c++ - 什么属于教育工具来证明人们在 C/C++ 中做出的无根据的假设?

c - 使用临时数组的动态内存分配

c++ - 为什么我不能更改结构的 char 数组属性?

c - 结构和指针错误 : dereferencing pointer to incomplete type

pointers - 取消引用结构指针是否复制结构?

c - C中的指针和地址