C 与全局变量关联的值错误的全局变量
我制作了这个头文件,该文件旨在使使用printf进行颜色和格式设置对我来说更容易,但不知何故,所有用于格式设置的参数都来自默认情况下我能告诉的活动(=1),尽管我已将它们默认定义为关闭(=0)。在.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
#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编写等式比较是可能的您只需使用=
,而不是=
(这只是意味着源代码中没有显式分支。这并不意味着编译器不会使用分支指令实现比较。)