我正在将一些用C编写的代码转换为C,因为我需要为我的嵌入式C项目编写一个支持应用程序。我有一些沉重的布尔运算正在进行,因为它是计算值进入硬件寄存器。
我需要在C项目和C#1中都有相同的定义,有很多定义,所以我需要用最少的努力来完成转换。
两个例子都很简单
为什么我不能这么做?
#define MCLK (198656000)
#define MCLK_TICK_NS (1000000000 / MCLK);
转换为
private const uint MCLK = 198656000;
private const uint MCLK_TICK_NS = (1000000000 / MCLK);
正确的方法是什么?
为什么我不能这么做?
#define test (unsigned long)((unsigned long)0x1 << (unsigned long)31)
转换为
private const uint test = (uint)((uint)0x1 << (uint)31);
正确的方法是什么?
在第二个例子中,我得到了错误
错误1常量值“-2147483648”无法转换为“uint”
(使用“unchecked”语法覆盖)
到底是什么?
为什么我要关闭检查来做完全合法的事情?
最佳答案
第一个代码为我编译没有错误。
对于第二个示例,我还有一个错误(但我使用的是mono):
错误CS0019:运算符<<' cannot be applied to operands of type
uint'和'uint'
所以,将cast从uint
中移除到31
private const uint test = (uint)((uint)0x1 << 31);
// no cast here ^^
解决问题。而且,我看不出第一个演员的原因,你可以直接写
private const uint test = (uint)0x1 << 31;
关于c# - 将#define转换为CS const,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18766562/