typedef:illegal use of this type as an expression

时间:2022-01-27 18:53:57
源程序:
#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void FUC(int);
int main(){
int test=1;
P(test);
    FUC *pp=P;
*pp(test);
}
VC下编译出现错误:
Compiling...
src.c
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2275: 'FUC' : illegal use of this type as an expression
        E:\CBs\HEXIN\TEST\src\src.c(5) : see declaration of 'FUC'
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2065: 'pp' : undeclared identifier
E:\CBs\HEXIN\TEST\src\src.c(10) : error C2063: 'pp' : not a function
Error executing cl.exe.

TEST.exe - 3 error(s), 0 warning(s)

那位知道是怎么回事,请解答,万分感谢!!!

12 个解决方案

#1


typedef void (*FUC)(int);

#2


后面:
FUC pp=P;

#3


*pp(test);
错了。调函数用指针就可以,pp(test);

#4


楼上正解
其实就是一个函数指针啊
typedef void (*FUC)(int);

定义了一个函数指针类型
此函数返回值为void, 参数一个是int

函数指针的值其实就是函数的入口地址
FUC pp=P;

#5


楼主真的大方耶。。。

#6


不客气,接分拉。

#7


typedef void FUC(int);
定义  了一个函数类型,它象void一样是不能定义变量的.
C中变量的声明前不能用可执行语句。

#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void (*FUC)(int);
int main(){
int test=1;
    FUC pp=P;
P(test);
*pp(test);
}

#8


我改成这样后
#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void FUC(int);
int main(){
int test=1;
P(test);
    FUC pp=P;
pp(test);
}
又出现了这样的错误:
--------------------Configuration: TEST - Win32 Debug--------------------
Compiling...
src.c
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2275: 'FUC' : illegal use of this type as an expression
        E:\CBs\HEXIN\TEST\src\src.c(5) : see declaration of 'FUC'
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2146: syntax error : missing ';' before identifier 'pp'
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2065: 'pp' : undeclared identifier
E:\CBs\HEXIN\TEST\src\src.c(9) : warning C4047: '=' : 'int ' differs in levels of indirection from 'void (__cdecl *)(int )'
E:\CBs\HEXIN\TEST\src\src.c(10) : error C2063: 'pp' : not a function
Error executing cl.exe.

TEST.exe - 4 error(s), 1 warning(s)
另外,我不可以用函数指针

#9


函数类型不可以定义变量和作为函数的返回值,这是一定的,没法分配空间
你不可以用函数指针?为什么?

#10


楼主不要这么死脑筋,为什么说:‘我不可以用函数指针’
error C2275: 'FUC' : illegal use of this type as an expression
明白地说:typedef void FUC(int);这样定义不行,
只能typedef void (*FUC)(int);

#11


#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void FUC(int);
int main(){
int test=1;
P(test);
    FUC *pp=P;
pp(test);
}

或者

#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void (*FUC)(int);
int main(){
int test=1;
P(test);
    FUC pp=P;
pp(test);
}

#12


提醒楼主
  变量声明必须放在程序块(函数或{……})的头部

int main(){
int test=1;
P(test);
     FUC pp=P;         /* 在程序中间定义函数指针,将编译出错 */
pp(test);
}

#1


typedef void (*FUC)(int);

#2


后面:
FUC pp=P;

#3


*pp(test);
错了。调函数用指针就可以,pp(test);

#4


楼上正解
其实就是一个函数指针啊
typedef void (*FUC)(int);

定义了一个函数指针类型
此函数返回值为void, 参数一个是int

函数指针的值其实就是函数的入口地址
FUC pp=P;

#5


楼主真的大方耶。。。

#6


不客气,接分拉。

#7


typedef void FUC(int);
定义  了一个函数类型,它象void一样是不能定义变量的.
C中变量的声明前不能用可执行语句。

#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void (*FUC)(int);
int main(){
int test=1;
    FUC pp=P;
P(test);
*pp(test);
}

#8


我改成这样后
#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void FUC(int);
int main(){
int test=1;
P(test);
    FUC pp=P;
pp(test);
}
又出现了这样的错误:
--------------------Configuration: TEST - Win32 Debug--------------------
Compiling...
src.c
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2275: 'FUC' : illegal use of this type as an expression
        E:\CBs\HEXIN\TEST\src\src.c(5) : see declaration of 'FUC'
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2146: syntax error : missing ';' before identifier 'pp'
E:\CBs\HEXIN\TEST\src\src.c(9) : error C2065: 'pp' : undeclared identifier
E:\CBs\HEXIN\TEST\src\src.c(9) : warning C4047: '=' : 'int ' differs in levels of indirection from 'void (__cdecl *)(int )'
E:\CBs\HEXIN\TEST\src\src.c(10) : error C2063: 'pp' : not a function
Error executing cl.exe.

TEST.exe - 4 error(s), 1 warning(s)
另外,我不可以用函数指针

#9


函数类型不可以定义变量和作为函数的返回值,这是一定的,没法分配空间
你不可以用函数指针?为什么?

#10


楼主不要这么死脑筋,为什么说:‘我不可以用函数指针’
error C2275: 'FUC' : illegal use of this type as an expression
明白地说:typedef void FUC(int);这样定义不行,
只能typedef void (*FUC)(int);

#11


#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void FUC(int);
int main(){
int test=1;
P(test);
    FUC *pp=P;
pp(test);
}

或者

#include<stdio.h>
void P(int i){printf("%d\n",i);}

typedef void (*FUC)(int);
int main(){
int test=1;
P(test);
    FUC pp=P;
pp(test);
}

#12


提醒楼主
  变量声明必须放在程序块(函数或{……})的头部

int main(){
int test=1;
P(test);
     FUC pp=P;         /* 在程序中间定义函数指针,将编译出错 */
pp(test);
}