如何将此代码从C转换为C

How can I convert this code from C to C++?

本文关键字:转换 代码      更新时间:2023-10-16

我正在使用MBED在一个嵌入式项目上工作。芯片制造商使用此查找发电机指定了周期性的冗余测试,但它以C为编写。查找生成器代码

    ///////////////////////configures CRC check lookup table////////////////////////
short pec15Table[256];
short CRC15_POLY = 0x4599;   //CRC code
void configCRC(void) 
{
    for (int i = 0; i < 256; i++)
    {
        remainder = i << 7;
        for (int bit = 8; bit > 0; --bit)
        {
            if (remainder & 0x4000)
            {
                remainder = ((remainder << 1));
                remainder = (remainder ^ CRC15_POLY)
            }
            else
            {
                remainder = ((remainder << 1));
            }
        }
    }
    pec15Table[i] = remainder&0xFFFF;
};

我对C 还不是很好,所以我只是复制并粘贴了它,并检查了清晰的语法错误。例如,我用简短和未签名的简短切换了INT16声明。但是,当我编译时,它会给我以下错误。这对我没有意义。我确定我做错了什么。

Error: Cannot determine which instance of overloaded function "remainder"  is intended in "config.cpp", Line: 20, Col: 10

显然,您与std::remainder有一个命名空间碰撞。这是避免全球变量的众多原因之一。C和C 否则应该在这里相同。

值得注意的是,此代码非常天真地编写。不仅必须重写该函数以正确使用参数,而且类型的使用遍布整个位置。

您绝对不应该在签名类型上进行算术算术,因为这可以为许多定义差的行为错误打开。必须用stdint.h的类型替换所有"草率打字"类型,例如shortint。您应该只使用未签名类型。您需要注意隐式整数促销。

只是将剩余的剩余命名为fremainder(或您需要的其他名称(,并在编译中看到魔术。

由于不遵循任何标准惯例,因此出现了这些问题。

检查此链接以了解为什么需要更名的变量