为什么使用C typedef而不是#defines?

me_*_*and 11 c standards

使用C代码typedef代替什么优势(如果有的话)#define

举个例子,使用是否有任何好处

typedef unsigned char UBYTE
Run Code Online (Sandbox Code Playgroud)

过度

#define UBYTE unsigned char
Run Code Online (Sandbox Code Playgroud)

当两者都可以用作

void func()
{
        UBYTE byte_value = 0;

        /* Do some stuff */

        return byte_value;
}
Run Code Online (Sandbox Code Playgroud)

显然,预处理器会尝试扩展#define它所看到的任何地方,这不会发生在a typedef,但在我看来,这似乎不是任何特定的优势或劣势; 我想不出如果出现问题,使用不会导致构建错误的情况.

Don*_*ows 23

如果你做一个数组类型的typedef,你会看到区别:

typedef unsigned char UCARY[3];
struct example { UCARY x, y, z; };
Run Code Online (Sandbox Code Playgroud)

用#define做到这一点......不,让我们不去那里.

[编辑]:另一个优点是调试器通常知道typedef但不知道#defines.

  • 预处理器:"虐待我,虐待我......让我感到被通缉!" +1 (9认同)