目标c:在数学表达式中使用#define常量值

Pet*_*son 4 iphone objective-c

我是iPhone开发的新手,我只是尝试了一些简单的绘图程序,而我在使用简单数学中的定义值时遇到了麻烦.

我有这样一条线:

int offset = (((myValue - min_value) * 6) - middle);
Run Code Online (Sandbox Code Playgroud)

这工作正常 - 但我不喜欢在那里使用硬编码6(因为我将使用它很多地方.

所以我想我会使用#define定义一个常量:

#define WIDTH_OFFSET 6;
Run Code Online (Sandbox Code Playgroud)

然后我可以使用:

int offset = (((myValue - min_value) * WIDTH_OFFSET) - middle);
Run Code Online (Sandbox Code Playgroud)

但是 - 这会产生编译器错误:"预期表达式".

我可以通过将计算分解为几行来解决这个问题:

int offset = myValue - min_value;
offset = offset * WIDTH_OFFSET;
offset = offset - middle;
Run Code Online (Sandbox Code Playgroud)

编译器认为这很好.

我猜这里有一些隐含的演员或其他一些语言功能 - 有人可以向我解释发生了什么吗?

das*_*ght 14

删除分号;#define:

#define WIDTH_OFFSET 6
Run Code Online (Sandbox Code Playgroud)

#define 从字面上替换它的参数,所以你的预处理后的表达式变成了

(((myValue - min_value) * 6;) - middle);
Run Code Online (Sandbox Code Playgroud)

如您所见,表达式中间有一个分号,这是一个语法错误.

另一方面,你的另一个表达方式

int offset = myValue - min_value;
offset = offset * WIDTH_OFFSET;
Run Code Online (Sandbox Code Playgroud)

没有表现出这样的问题,因为连续有两个分号

 offset = offset * 6;;
Run Code Online (Sandbox Code Playgroud)

在语法上是有效的.