正如问题所说,C预处理器能够做到这一点吗?
例如:
#define PI 3.1416
#define OP PI/100
#define OP2 PI%100
有没有办法在预处理阶段计算OP和/或OP2?
发布于 2009-10-13 13:49:37
整数算术?运行以下程序找出答案:
#include "stdio.h"
int main() {
#if 1 + 1 == 2
printf("1+1==2\n");
#endif
#if 1 + 1 == 3
printf("1+1==3\n");
#endif
}
答案是“是”,有一种方法可以让预处理器执行整数运算,这就是在预处理器条件下使用它。
但是请注意,您的示例不是整型算术。我刚刚检查过了,如果您试图让gcc的预处理器进行浮点比较,它就会失败。我还没有检查这个标准是否允许在预处理器中使用浮点运算。
正则宏展开不计算整数表达式,它将其留给编译器,这可以通过预处理(gcc中的-E)看到以下内容:
#define ONEPLUSONE (1 + 1)
#if ONEPLUSONE == 2
int i = ONEPLUSONE;
#endif
结果是int i = (1 + 1);
(可能加上一些指示源文件名和行号之类的东西)。
发布于 2009-10-13 13:50:32
你写的代码实际上并不会让预处理器做任何计算。#define进行简单的文本替换,因此定义了:
#define PI 3.1416
#define OP PI/100
这段代码:
if (OP == x) { ... }
变成了
if (3.1416/100 == x) { ... }
然后它会被编译。编译器反过来可以选择采用这样的表达式,并在编译时计算它,并生成与以下内容等效的代码:
if (0.031416 == x) { ... }
但这是编译器,不是预处理器。
为了回答你的问题,是的,预处理器可以做一些算术。这可以在你写下这样的代码时看到:
#if (3.141/100 == 20)
printf("yo");
#elif (3+3 == 6)
printf("hey");
#endif
发布于 2009-10-13 13:59:39
是的,我的意思是:它可以做算术:)
如99 bottles of beer中所示。
https://stackoverflow.com/questions/1560357
复制相似问题