在C/C++中,将指数形式的浮点数声明为宏的正确方法是什么?

uidvcgyl  于 2023-05-02  发布在  C/C++
关注(0)|答案(1)|浏览(116)

我试图用C++创建一个非常简单的程序来计算两个物体之间的引力。所以我想为G声明一个宏,其值等于6。754*10^-11,我用这个:

#define G 6.754e-11.0;

但它产生了大量的杂散错误,如下所示:

cd '~/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++,如下所示:
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.
ht4b089n

ht4b089n1#

错误信息

stray ‘\342’ in program

意味着你的程序中包含了一个C语法不允许的字符(从技术上讲,它在“基本源代码字符集”之外)。三位数是问题的数值 byte 的八进制编码。一行中有三个这样的字符,因此有问题的字节序列是0342 0210 0222,这是Unicode字符U+2212 MINUS SIGN的UTF-8编码。
是的。在C
中不允许使用减号。您必须使用U+002 D HYPHEN-MINUSes。
要解决这部分问题,请在编辑器中转到

#define G 6.754e-11.0;

在减号上用退格键重新键入。这可能是因为你从一个使用花哨(我的意思是“不仅仅是普通的ASCII”)排版的网页或PDF中复制并粘贴了这个数字。
您还需要解决一些其他问题。分号根本不应该出现在那里,因为#define在行尾结束。在C++中,浮点文字的指数必须是整数。所以你真正需要的是

#define G 6.754e-11

使用const变量也可以说是更好的,因为你不需要宏:

const double G = 6.754e-11;

(note分号现在已返回)。..但我是个老派的人,不反对用宏来表示数字常量。
这里绝对没有理由使用pow

相关问题