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

Aal*_*Ver -1 c++ macros

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

#define G 6.754e-11.0;
Run Code Online (Sandbox Code Playgroud)

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

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);}
Run Code Online (Sandbox Code Playgroud)

所以,我决定使用数学库函数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.
Run Code Online (Sandbox Code Playgroud)

zwo*_*wol 6

错误消息

stray ‘\342’ in program
Run Code Online (Sandbox Code Playgroud)

表示您的程序包含C++语法不允许的字符(从技术上讲,它在"基本源字符集"之外).三位数字是问题字节数值的八进制编码.你有三个连续的,所以有问题的字节序列是0342 0210 0222,这是Unicode字符U + 2212 MINUS SIGN的UTF-8编码.

没错,你不允许在C++中使用减号.你必须使用U + 002D HYPHEN-MINUSes.

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

#define G 6.754e-11.0;
Run Code Online (Sandbox Code Playgroud)

在减号上退格并重新键入.这可能是因为您复制并粘贴了网页或使用花式的PDF(我的意思是"不仅仅是普通的ASCII")排版.

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

#define G 6.754e-11
Run Code Online (Sandbox Code Playgroud)

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

const double G = 6.754e-11;
Run Code Online (Sandbox Code Playgroud)

(注意分号现在已经返回了)...但是我老了,不能反对使用宏来表示数字常量.

绝对没有理由在pow这里使用.