小众知识

首页 > 正文

一个很菜的问题,路过的高手乃举手这劳也!!!!!

typedef void(*Fun)();
中的typedef是什么意思???????  

 WhatCanIdoing 发表于:2003-05-21 21:00:04
得分:0 

typedef int INT; //意思为 INT 为 int 的别名
INT aaa;// 就是 int aaa;

对于 typedef void(*Fun)();
看typedef的时候,先把typedef去掉,把后面的看成是一个变量声明,比如
void (*Fun)();
这个看起来就清楚了,Fun是一个函数指针,它的参数是void,返回值是void.

那么在typedef中Fun就是一类的函数的别名,这类函数参数是void,返回值是void 

 spark_li 发表于:2003-05-21 21:02:25
得分:0 

呵呵,解释得足够清楚了。 

 lth_81 发表于:2003-05-22 01:45:24
得分:0 

C++ Language Reference   

typedef Specifier
A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the type-declaration portion of the declaration. 

typedef type-declaration synonym;
You can use typedef declarations to construct shorter or more meaningful names for types already defined by the language or for types that you have declared. Typedef names allow you to encapsulate implementation details that may change.

In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.

You cannot use the typdef specifier inside a function definition.

Typedef names share the name space with ordinary identifiers. Therefore, a program can have a typedef name and a local-scope identifier by the same name.

Example
// typedef_specifier1.cpp
typedef char FlagType;

int main() {
}

void myproc( int ) {
    int FlagType;
}
When declaring a local-scope identifier by the same name as a typedef, or when declaring a member of a structure or union in the same scope or in an inner scope, the type specifier must be specified. For example:

typedef char FlagType;
const FlagType x;
To reuse the FlagType name for an identifier, a structure member, or a union member, the type must be provided:

const int FlagType;  /* Type specifier required */
It is not sufficient to say

const FlagType;      /* Incomplete specification */
because the FlagType is taken to be part of the type, not an identifier that is being redeclared. This declaration is taken to be an illegal declaration like

int;  /* Illegal declaration */
You can declare any type with typedef, including pointer, function, and array types. You can declare a typedef name for a pointer to a structure or union type before you define the structure or union type, as long as the definition has the same visibility as the declaration.

Examples

One use of typedef declarations is to make declarations more uniform and compact. For example:

typedef char CHAR;          // Character type.
typedef CHAR * PSTR;        // Pointer to a string (char *).
PSTR strchr( PSTR source, CHAR target );
typedef unsigned long ulong;
ulong ul;     // Equivalent to "unsigned long ul;"
To use typedef to specify fundamental and derived types in the same declaration, you can separate declarators with commas. For example:

typedef char CHAR, *PSTR;
The following example provides the type DRAWF for a function returning no value and taking two int arguments:

typedef void DRAWF( int, int );
After the above typedef statement, the declaration

DRAWF box; 
would be equivalent to the declaration 

void box( int, int );
Example
typedef is often combined with struct to declare and name user-defined types:

// typedef_specifier2.cpp
#include 

typedef struct mystructtag {
   int   i;
   double f;
} mystruct;

int main() {
   mystruct ms;
   ms.i = 10;
   ms.f = 0.99;
   printf("%d   %f\n", ms.i, ms.f);
}

 wang_shq 发表于:2003-05-22 08:23:57
得分:0 

up 
up

上一篇:数据结构在编程中到底能有多大作用
下一篇:推荐一些编译器的原代码,谢谢!

分享到: