typedef在C中存储指针

use*_*382 5 c pointers typedef

指针的大小取决于机器的拱形.

所以sizeof(int*)= sizeof(int)或sizeof(int*)= sizeof(long int)

我希望有一个自定义数据类型,它是int或long int,具体取决于指针的大小.

我试图使用宏#if,但宏的条件不允许sizeof运算符.

另外,当使用if-else时,typedef仅限于if的范围.

if((sizeof(int)==sizeof(int *)){
  typedef int ptrtype;
}
else{
  typedef long int ptrtype;
}
//ptrtype not avialble here
Run Code Online (Sandbox Code Playgroud)

有没有办法在全球范围内定义ptrtype?

Car*_*rum 7

在C99你可以使用intptr_t.


cra*_*cot 4

执行此操作的传统方法过去是使用 GNU autoconf (或类似的)来设置一些定义,例如SIZEOF_VOIDPTR,但如果您有一个足够新的编译器,那么该类型intptr_t很可能就是您想要的。(您可能需要设置一些编译器标志以启用 C99 模式;它位于<stdint.h>.)