我开始学习C ++了。这是我遇到的一个问题:
#include <iostream>
using namespace std;
#define PI 3.14;
int main(){
double r = 5.0;
double circle;
double inp;
circle = 2 * PI * r;
cout << circle;
cin >> inp;
}
显示错误:error C2100: illegal indirection
。
我用谷歌搜索但没有找到答案。感谢
答案 0 :(得分:11)
#define PI 3.14;
;
错误,请将其删除。
顺便说一句,您的行扩展为circle = 2 * 3.14; * r;
所以编译器就会抱怨* r,它解释了错误信息。
答案 1 :(得分:6)
宏是(相对)简单的替换,所以,当你写:
#define PI 3.14;
circle = 2 * PI * r;
它实际上最终为:
circle = 2 * 3.14; * r;
有效地使用两个语句:
circle = 2 * 3.14;
* r;
如果r
是某些描述的指针,那么最后一行将是一个完全有效的表达式(尽管它不是非常有用的表达式)。但是,鉴于它是双重的,那就是你从非法间接获得的。
除非在非常特殊的情况下,否则现在通常应该避免使用宏。使用它们来提供内联函数主要归入inline
关键字(“大多数”,因为inline
关键字只是一个建议)。
此外,使用const
关键字可以更好地使用它来提供常量(具有完整类型支持和通常更好的调试的优势)。
换句话说,你的PI
常量会更好地写成:
const double PI = 3.141592653589;
现在我使用预处理器的唯一地方是条件编译。
顺便说一句,你可能意味着circumference
而不是circle
。前者是圆圈外侧的长度,后者根本不是长度值。