【问题标题】:What is the proper way of declaring a floating point number in exponential form as a macro in C/C++?在 C/C++ 中将指数形式的浮点数声明为宏的正确方法是什么?
【发布时间】:2018-01-17 19:48:33
【问题描述】:

我试图创建一个非常简单的程序来计算 C++ 中两个对象之间的引力,所以我想为 G 声明一个宏,其值等于 6.754*10^-11,我使用了这个 -

#define G 6.754e-11.0;

但是它产生了很多如下所示的杂散错误-

aalpanigrahi@aalpanigrahi:~/Desktop/CS/C++/Other PSETS$ g++ gravity.cpp -o gravity
gravity.cpp:5:28: error: stray ‘\342’ in program
 #define G (6.754)*pow(10.0,��11.0);
                            ^
gravity.cpp:10:52: note: in expansion of macro ‘G’
     float gforce(float m1,float m2,float r){return G*m1*m2/(r*r);}
                                                    ^
gravity.cpp:5:29: error: stray ‘\210’ in program
 #define G (6.754)*pow(10.0,��11.0);
                             ^
gravity.cpp:10:52: note: in expansion of macro ‘G’
     float gforce(float m1,float m2,float r){return G*m1*m2/(r*r);}
                                                    ^
gravity.cpp:5:30: error: stray ‘\222’ in program
 #define G (6.754)*pow(10.0,�11.0);
                              ^
gravity.cpp:10:52: note: in expansion of macro ‘G’
     float gforce(float m1,float m2,float r){return G*m1*m2/(r*r);}

所以,我决定使用数学库函数 cmath 来使用 pow() ,但它仍然没有用。我该怎么做才能创建这样一个宏?

注意 - 我在 Ubuntu 上使用 G++,如下所示 -

aalpanigrahi@aalpanigrahi:~/Desktop/CS/C++/Other PSETS$ g++ --version
g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

【问题讨论】:

  • 删除#define...行末尾的;
  • 也不要使用宏。
  • 我强烈建议不要使用单字母名称,例如 G
  • stray ‘\342’ in program 您是否从网站复制和粘贴?有时在网站上使用看起来相同但不同的字符,主要使用而不是"

标签: c++ macros


【解决方案1】:

错误信息

stray ‘\342’ in program

表示您的程序包含 C++ 语法不允许的字符(从技术上讲,它在“基本源字符集”之外)。三位数是问题byte的数值的八进制编码。您连续获得了其中三个,因此有问题的字节序列是0342 0210 0222,它是 Unicode 字符 U+2212 减号的 UTF-8 编码。

没错,你不能在 C++ 中使用减号。您必须改用 U+002D HYPHEN-MINUSes。

要解决这部分问题,请在编辑器中转到该行

#define G 6.754e-11.0;

在减号上退格并重新键入。这可能是因为您从使用花哨(我的意思是“不仅仅是纯 ASCII”)排版的网页或 PDF 中复制并粘贴了数字。

您仍然需要解决其他几个问题。那个分号根本不应该在那里,因为#defines 在行尾结束。并且 C++ 中浮点文字的指数必须是整数。所以你真正应该拥有的是

#define G 6.754e-11

使用const 变量可能会更好,因为您不需要宏:

const double G = 6.754e-11;

(请注意,分号现在已经返回)......但我已经够老派了,不反对将宏用于数字常量。

这里绝对没有理由使用pow

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2012-03-05
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多