我搜索了SO,但没有找到这个具体问题的答案.请原谅我已经回答了.
如果您有以下内容:
#define MACRO 40
Run Code Online (Sandbox Code Playgroud)
您不将它分配给在循环中使用它的变量:
for(int i = 0; i < MACRO; i++) {...
Run Code Online (Sandbox Code Playgroud)
然后,每个处理器创建:
for(int i = 0; i < 40; i++) {...
Run Code Online (Sandbox Code Playgroud)
然后编译器会将它隐式地转换为int,因为比较是使用类型int i吗?我看过这个问题#define变量的类型,而Edgar Bonet的一些答案暗示了编译器选择如何处理宏的顺序?
这个问题,C++如何隐式地将参数转换为比较器,如<?,也有人建议,但只描述了隐式转换如何与两种类型进行比较.由于宏实际上没有类型,我不确定这是否适用.
我对如何在固定点环境中处理算术计算感到困惑.考虑以下代码行:
/* unsigned short is 16 bit.*/
unsigned short x = 1000;
unsigned short res;
/* Case1: The following yields correct result in res */
res = (x*544/100);
/* Case2: The following yields wrong result in res*/
res = (x*544); /* expected overflow here */
res = res/100;
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:我可以看出为什么案例2会产生错误的结果.但是 - 编译器在情况1中产生正确结果的是什么? - 在案例1中,算术运算不是基本相同吗?除此之外,它分为两个陈述? - 我可以期待来自不同编译器的不同行为吗?