如何将此代码从C转换为C
How can I convert this code from C to C++?
我正在使用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的类型替换所有"草率打字"类型,例如short
和int
。您应该只使用未签名类型。您需要注意隐式整数促销。
只是将剩余的剩余命名为fremainder(或您需要的其他名称(,并在编译中看到魔术。
由于不遵循任何标准惯例,因此出现了这些问题。
检查此链接以了解为什么需要更名的变量
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么g++在未执行的代码处标记强制转换错误
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 16 位到 10 位转换代码说明
- 以下对二进制转换代码的小数如何工作
- 中缀到后缀表达式转换代码不起作用
- C++中的十进制到十六进制转换代码
- 这个后缀转换 C++ 代码的中缀有什么问题
- 如何优化 YUV 到 RGB 颜色转换代码
- Win32 键转换代码输出不需要的按键
- C++ NV12 到 RGB24 转换代码
- 转换代码以使用矢量
- C++货币转换代码
- 这段c++类型转换代码在做什么?
- 缓慢运行的方向转换代码
- 在c++中转换代码页
- 转换代码从SSE2到SSE4在C
- MATLAB到c++的行转换代码
- 如何编写可转换代码,32位/64位