【发布时间】:2015-11-09 14:49:22
【问题描述】:
我在 C 中创建以下结构,只有 Packet 结构将通过 UDP 套接字发送。我想打包结构以避免在不同的计算机上出现不同的对齐方式(不确定我需要打包两个还是只打包我发送的一个)。当我编译这个时,我得到以下两个警告:
warning: ignoring #pragma ( [-Wunknown-pragmas] #pragma(pack);`
为什么我的编译指示被忽略了?以及如何解决这个问题。
#pragma push(pack, 1);
struct packet{ // the actual packet within the node
uint32_t seqnum;
uint32_t checkSum;
uint32_t numPackets; // number of packets to send
char data[1024]; // the data in the packet
};
struct packetNode{ //for the linked list
struct packet p;
struct packetNode *next;
};
#pragma pop(pack)
gcc 版本:
gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
【问题讨论】:
-
可能是因为你的编译器不支持
#pragma。 -
与问题没有直接关系,但如果您关心不同计算机之间的互操作性,您是否考虑过发送方和接收方之间的不同字节序?
-
是的,我在发送之前对数据猫执行 htonl(),在接收时我执行 ntohl()
标签: c sockets struct pragma pack