gcc 用可视化cpp杂注转换__attribute__((packed))的创造性方法

oknrviil  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(169)

我正在做一个项目,这个项目需要把一个庞大的代码库从运行在嵌入式目标上的c转换成一个visual c软件,c代码中的所有结构都是用visual c不支持的__attribute__ ((pack))定义的,我不能修改c代码。
我正在寻找一个变通方案,它将使我能够使vc++引用__attribute__ ((packed))的方式与引用pragma pack、pop宏相同
用一个define替换这两个的简单方法是不可能的,因为__attribute__ ((packed))宏在它的字之间有一个空格,并且第二个字以"(“开始
有没有其他创造性的方法不会让我改变代码?

vxqlmq5t

vxqlmq5t1#

首先,我会问自己,在VC编译版本的代码中,结构是否需要打包?这是出于功能原因,还是仅仅是原始代码编写者的一时兴起?
其次,代码是否使用了其他__attribute__指令?如果没有,您可以定义一个空宏来安全地“删除”所有gcc __attribute__指令,或者:

#define __attribute__(...)

在“强制包含”头文件(命令行选项/FI <filename>)中,或者简单地:

/D __attribute__(...)

如果您需要添加其他指令来适应代码,那么强制包含可能会更简单。
因此,如果__attribute__的唯一用途是打包,而你并不真的需要打包结构,那么你就完成了。然而,如果打包是必不可少的,正如你所说:
C代码中的 * 所有 * 结构都是[packed]的
然后,您可以使用/Zp通过命令行对项目全局应用打包,或者在强制包含文件add:

#pragma pack(1)

如果解决方案并不真正适合--例如,不是所有的结构都应该打包,或者__attribute__被用于(并且需要)其他目的--那么阻力最小的途径可能是使用gcc而不是VC来构建Windows,最简单的方法是使用MinGW(minimal GNU for Windows)。

相关问题