Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Colors_Printf_Global Variables_Stdio - Fatal编程技术网

C 与全局变量关联的值错误的全局变量

C 与全局变量关联的值错误的全局变量,c,colors,printf,global-variables,stdio,C,Colors,Printf,Global Variables,Stdio,我制作了这个头文件,该文件旨在使使用printf进行颜色和格式设置对我来说更容易,但不知何故,所有用于格式设置的参数都来自默认情况下我能告诉的活动(=1),尽管我已将它们默认定义为关闭(=0)。在.c文件中将它们更改为关闭也不会改变任何东西 #include <stdio.h> //parameters short print_bold = 0;//1 short print_LessVisible = 0; //2 short print_cursive = 0;//3 shor

我制作了这个头文件,该文件旨在使使用printf进行颜色和格式设置对我来说更容易,但不知何故,所有用于格式设置的参数都来自默认情况下我能告诉的活动(=1),尽管我已将它们默认定义为关闭(=0)。在.c文件中将它们更改为关闭也不会改变任何东西

#include <stdio.h>

//parameters
short print_bold = 0;//1
short print_LessVisible = 0; //2
short print_cursive = 0;//3
short print_underline = 0;//4
short print_blinking = 0;//5
short print_SwapBackground = 0; //7
short print_SameBackground = 0;//8
short print_crossed = 0;//9
short print_LineOver = 0; //53
short print_HighIntensity = 0;

void text_color(unsigned short color){;
  short print_mode_1 = (print_bold = 1);
  short print_mode_2 = 2 * (print_LessVisible = 1);
  short print_mode_3 = 3 * (print_cursive = 1);
  short print_mode_4 = 4 * (print_underline = 1);
  short print_mode_5 = 5 * (print_blinking = 1);
  //print_mode_6 = print_mode_5
  short print_mode_7 = 7 * (print_SwapBackground = 1);
  short print_mode_8 = 8 * (print_SameBackground = 1);
  short print_mode_9 = 9 * (print_crossed = 1);
  short print_mode_53 = 53 * (print_LineOver = 1);


  int color_value = 30 + color * (color < 8) + 60 * (print_HighIntensity = 1);

  printf("\e[%d;%d;%d;%d;%d;%d;%d;%d;%d;%dm",print_mode_1,print_mode_2,print_mode_3,print_mode_4,print_mode_5,print_mode_7,print_mode_8,print_mode_9,print_mode_53,color_value);
}

void background_color(unsigned short color){
  int color_value = 40 + color * (color < 8) + 60 * (print_HighIntensity = 1);
  printf("\e[%dm",color_value);
}
#包括
//参数
短字体_粗体=0//1.
短打印_LessVisible=0//2.
短字体_草书=0//3.
短字体_下划线=0//4.
短打印_闪烁=0//5.
短打印_SwapBackground=0//7.
短打印_SameBackground=0//8.
短打印_=0//9
短打印_LineOver=0//53
短打印高强度=0;
无效文本颜色(无符号短颜色){;
短打印模式1=(打印粗体=1);
短打印模式=2*(打印模式=1);
短打印模式3=3*(打印草书=1);
短打印模式4=4*(打印下划线=1);
短打印模式5=5*(打印闪烁=1);
//打印模式6=打印模式5
短打印模式=7*(打印背景=1);
短打印模式=8*(打印样本背景=1);
短打印模式=9*(打印模式=1);
短打印模式=53*(打印模式=1);
int color_值=30+color*(颜色<8)+60*(打印高强度=1);
printf(“\e[%d;%d;%d;%d;%d;%d;%d;%d;%dm”,打印模式1,打印模式2,打印模式3,打印模式4,打印模式5,打印模式7,打印模式8,打印模式9,打印模式53,颜色值);
}
无效背景颜色(无符号短颜色){
int color_值=40+color*(颜色<8)+60*(打印高强度=1);
printf(“\e[%dm”,颜色值);
}

您将比较运算符
==
与赋值运算符
=
混合使用。在赋值
后,必须是
1
,而不是
0

 printf("%d\n", print_bold); // 0
 short print_mode_1 = (print_bold = 1);
 //                             ^^^ - assignment
 //                ^^^ - assignment
 printf("%d\n", print_bold); // 1
分配的结果就是分配的。
print\u mode\u 1=(print\u bold=1);
等于:
print\u bold=1;print\u mode\u 1=1


=
=
混合使用是经常发生的一个非常常见的错误。如果要比较,请将
=
更改为
=
,而不是赋值。

在初始化打印模式变量和颜色值时,我使用的=就像是一个类似的运算符。我更改了
打印模式=x*(打印参数=1)
print\u mode\u x=x*(print\u parameter==0)
。我使用无分支编程的原因是它允许我编写更少的代码行(实际上也更快)。

您在初始化中尝试如何处理赋值?例如
short print\u mode\u 1=(print\u bold=1)
。这不是典型的做事方式,很可能是你的问题。我曾试图做无分支编程,但我没有意识到,这只适用于语句,而不适用于=Great;
print\u mode\u 1=print\u bold==1;
@Maximilian:在没有分支的情况下,用C编写等式比较是可能的您只需使用
=
,而不是
=
(这只是意味着源代码中没有显式分支。这并不意味着编译器不会使用分支指令实现比较。)