Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将一个文字定义为另一个文字的倍数会导致错误的结果_C_Literals - Fatal编程技术网

C 将一个文字定义为另一个文字的倍数会导致错误的结果

C 将一个文字定义为另一个文字的倍数会导致错误的结果,c,literals,C,Literals,为什么以下代码在分母中使用4*PI的文本时给出错误的结果,如1.0/FOUR_PI #include <stdio.h> #define PI 3.14159265358979323846 #define FOUR_PI 4.0*PI int main() { printf("4.0*PI = %.20lf\n", 4.0*PI); printf("FOUR_PI = %.20lf\n", FOUR_PI); printf("4.0*PI - FOUR_PI =

为什么以下代码在分母中使用4*PI的文本时给出错误的结果,如
1.0/FOUR_PI

#include <stdio.h>
#define PI 3.14159265358979323846
#define FOUR_PI 4.0*PI

int main() {
  printf("4.0*PI   = %.20lf\n", 4.0*PI);
  printf("FOUR_PI  = %.20lf\n", FOUR_PI);
  printf("4.0*PI - FOUR_PI  = %.60lf\n", 4.0*PI - FOUR_PI);
  printf("1.0/(4.0*PI) = %.20lf\n", 1.0/(4.0*PI));
  printf("1.0/FOUR_PI  = %.20lf\n", 1.0/FOUR_PI);
  return 0;
}
#包括
#定义PI 3.14159265358979323846
#定义四个_PI 4.0*PI
int main(){
printf(“4.0*PI=%.20lf\n”,4.0*PI);
printf(“四个圆周率=%.20lf\n”,四个圆周率);
printf(“4.0*PI-FOUR_-PI=%.60lf\n”,4.0*PI-FOUR_-PI);
printf(“1.0/(4.0*PI)=%.20lf\n”,1.0/(4.0*PI));
printf(“1.0/FOUR_PI=%.20lf\n”,1.0/FOUR_PI);
返回0;
}

结果表明,在解析文本时,它的表达式被替换为代码,而不是它的值。也就是说,
1.0/FOUR_PI
正被
1.0/4.0*PI
所取代。请参见以下示例进行说明:

#include <stdio.h>
#define PI 3.14159265358979323846
#define FOUR_PI (4.0*PI)
#define FOUR_PI2 4.0*PI

int main() {
  printf("4.0*PI   = %.20lf\n", 4.0*PI);
  printf("FOUR_PI  = %.20lf\n", FOUR_PI);
  printf("FOUR_PI2 = %.20lf\n", FOUR_PI2);
  printf("4.0*PI - FOUR_PI  = %.20lf\n", 4.0*PI - FOUR_PI);
  printf("4.0*PI - FOUR_PI2 = %.20lf\n", 4.0*PI - FOUR_PI2);
  printf("1.0/(4.0*PI)  = %.20lf\n", 1.0/(4.0*PI));
  printf("1.0/FOUR_PI   = %.20lf\n", 1.0/FOUR_PI);
  printf("1.0/(FOUR_PI) = %.20lf\n", 1.0/(FOUR_PI));
  printf("1.0/FOUR_PI2  = %.20lf\n", 1.0/FOUR_PI2);
  return 0;
}

它的表达式被替换到代码中,而不是它的值。预处理器就是这样工作的,是的。括号是你的朋友
4.0*PI
不是文字
4.0*PI   = 12.56637061435917246399
FOUR_PI  = 12.56637061435917246399
FOUR_PI2 = 12.56637061435917246399
4.0*PI - FOUR_PI  = 0.00000000000000000000
4.0*PI - FOUR_PI2 = 0.00000000000000000000
1.0/(4.0*PI)  = 0.07957747154594767280
1.0/FOUR_PI   = 0.07957747154594767280
1.0/(FOUR_PI) = 0.07957747154594767280
1.0/FOUR_PI2  = 0.78539816339744827900