Piy*_*ush 2 c struct pointers typedef
struct abc
{
//some members
}arrayOf[10];
struct def
{
//some data memebers
}obj;
typedef void (*abc) (obj)
Run Code Online (Sandbox Code Playgroud)
我不确定该陈述的typedef void (*abc) (obj)
含义是什么.请考虑我是新手.
即使忽略丢失的分号,也没有任何意义; 这是一个错误.
如果obj
是类型名称,它将定义abc
为类型的别名void (*)(obj)
,即,作为指向函数的指针,该函数采用类型的单个参数obj
并返回void
.
但由于它obj
是一个对象名,而不是一个类型名,实际上并不是它的意思.
当我用gcc编译它时,我收到一个警告:
warning: parameter names (without types) in function declaration
Run Code Online (Sandbox Code Playgroud)
当我编译时-pedantic-errors
,警告变成致命错误.
旧式(非原型)函数定义可以合法地为参数指定名称,但不能指定类型:
void old_style_func(obj)
/* obj is implicitly of type int */
{
}
Run Code Online (Sandbox Code Playgroud)
但该表单对函数声明无效.在声明中,括号之间的单个标识符必须是类型名称,而不是参数的名称 - 这使得声明成为原型.
gcc的错误消息意味着它试图将其解释为它是旧式定义的开头,然后判断它是无效的,因为它只是一个声明.
最重要的是你应该密切关注编译器警告.
我们可以猜测是什么意思.也许obj
是一个类型名称,这个:
struct def
{
//some data memebers
}obj;
Run Code Online (Sandbox Code Playgroud)
应该是:
typedef struct def
{
// some data members
} obj;
Run Code Online (Sandbox Code Playgroud)
或者可能是意外省略了类型名称,最后一行应该是:
typedef void (*abc) (struct def obj);
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下,该名称obj
被用于不同目的两次(合法但令人困惑).但没有更多的背景,就不可能确定如何"修复"它.
这段代码来自哪里?你确定你已经向我们展示了确切的代码吗?你试图编译它时发生了什么?