我应该在库调用中使用自己的typedef吗?

hap*_*ear 1 c typedef function-calls

我目前正在Linux中进行一些网络编程,为此我为自己做了一些便携性的问题

typedef char int8;
typedef unsigned char uint8;

typedef short int16;
typedef unsigned short uint16;

typedef int int32;
typedef unsigned int uint32;
Run Code Online (Sandbox Code Playgroud)

现在我想要为常用的套接字函数编写一些包装函数.一个简短的例子是:

int32 rawSocketCreate(int* sockfd, int protocol) {

    *sockfd = socket(AF_PACKET, SOCK_RAW, htons(protocol));

    if (*sockfd == -1) {
        printf("Error creating raw socket\n");
        return -1;
    }

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

我现在的问题是:对于我传递给库函数的参数,我应该继续使用标准数据类型还是使用我自己的?

rawSocketCreate(int* sockfd, int protocol)
/* OR */
rawSocketCreate(int32* sockfd, int32 protocol)
Run Code Online (Sandbox Code Playgroud)

Dev*_*lar 6

C pet peveve ...它有什么问题<stdint.h>和它提供的标准 typedef?每个人似乎都使用自己发明的typedef,但实际上似乎没有人使用标准包含(包含适当的宏printf()scanf()处理等)...


如果一个API调用需要一个int,你应该传递int,而不要假设所述的原生宽度int(因为假设往往会在最不幸的时刻中断).

如果确切的宽度很重要,请使用定义宽度的typedef .(例如结构布局,硬件驱动程序的跨平台二进制兼容性......)