相关疑难解决方法(0)

C宏是否隐式投射?

我搜索了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++如何隐式地将参数转换为比较器,如<?,也有人建议,但只描述了隐式转换如何与两种类型进行比较.由于宏实际上没有类型,我不确定这是否适用.

c c++ macros types c-preprocessor

6
推荐指数
3
解决办法
2936
查看次数

整数溢出如何在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中,算术运算不是基本相同吗?除此之外,它分为两个陈述? - 我可以期待来自不同编译器的不同行为吗?

c arithmetic-expressions overflow integer-promotion

2
推荐指数
1
解决办法
585
查看次数