我正在做一个项目,这个项目需要把一个庞大的代码库从运行在嵌入式目标上的c转换成一个visual c软件,c代码中的所有结构都是用visual c不支持的__attribute__ ((pack))
定义的,我不能修改c代码。
我正在寻找一个变通方案,它将使我能够使vc++引用__attribute__ ((packed))
的方式与引用pragma pack、pop宏相同
用一个define替换这两个的简单方法是不可能的,因为__attribute__ ((packed))
宏在它的字之间有一个空格,并且第二个字以"(“开始
有没有其他创造性的方法不会让我改变代码?
1条答案
按热度按时间vxqlmq5t1#
首先,我会问自己,在VC编译版本的代码中,结构是否需要打包?这是出于功能原因,还是仅仅是原始代码编写者的一时兴起?
其次,代码是否使用了其他
__attribute__
指令?如果没有,您可以定义一个空宏来安全地“删除”所有gcc__attribute__
指令,或者:在“强制包含”头文件(命令行选项
/FI <filename>
)中,或者简单地:如果您需要添加其他指令来适应代码,那么强制包含可能会更简单。
因此,如果
__attribute__
的唯一用途是打包,而你并不真的需要打包结构,那么你就完成了。然而,如果打包是必不可少的,正如你所说:C代码中的 * 所有 * 结构都是[packed]的
然后,您可以使用
/Zp
通过命令行对项目全局应用打包,或者在强制包含文件add:如果解决方案并不真正适合--例如,不是所有的结构都应该打包,或者
__attribute__
被用于(并且需要)其他目的--那么阻力最小的途径可能是使用gcc而不是VC来构建Windows,最简单的方法是使用MinGW(minimal GNU for Windows)。