乘法时非法间接

时间:2013-12-02 14:08:16

标签: c++ visual-c++

我开始学习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。 我用谷歌搜索但没有找到答案。感谢

2 个答案:

答案 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。前者是圆圈外侧的长度,后者根本不是长度值。