我有一个我正在编写的程序,它是一个基本的图像绘制程序.它在C.
最初我宣布
typedef struct
{
int red;
int green;
int blue;
} pixel_colour;
Run Code Online (Sandbox Code Playgroud)
我有一个函数来填充接受这个的背景,所以我用它就像.
pixel_colour flood_colour = {80,50,91};
FloodImage(flood_colour);
Run Code Online (Sandbox Code Playgroud)
现在这可以正常工作,如果它是我主要的唯一的东西,但只要我添加一个开关/案例和我的其余代码我不能再使用 pixel_colour flood_colour = {80,50,91};
反而得到
error C2275: 'pixel_colour' : illegal use of this type as an expression
1> c:\users\xxxx\documents\visual studio 2010\projects\xxx.c(20) : see declaration of 'pixel_colour'
Run Code Online (Sandbox Code Playgroud)
主要代码如下,它可以正常使用我的所有功能,直到我尝试使用pixel_colour,它将被设置为变量而不是200,200,200,但即使这样也行不通
char instring[80] = "FL 201 3 56";
int pst = FirstTwo(instring);
switch( pst )
{
case 1:
printf( "FL ");
CaseFL(instring);
pixel_colour flood_colour = {200,200,200};
FloodImage(flood_colour);
break;
case 2:
printf( "LI" );
break;
case 3:
printf( "RE" );
break;
case 4:
printf( "CH" );
break;
case 5:
printf( "FI" );
break;
case 6:
printf( "EX" );
exit(EXIT_FAILURE);
break;
default :
printf( "Something went wrong" );
break;
}
Run Code Online (Sandbox Code Playgroud)
在C89中,由MSVC支持,您只能在代码块的开头声明一个变量.相反,你可以这样做:
case 1:
{
// first thing in the block - variable declaration / initialization
pixel_colour flood_colour = {200,200,200};
printf( "FL ");
CaseFL(instring);
FloodImage(flood_colour);
break;
}
Run Code Online (Sandbox Code Playgroud)
C99,C11和C++都允许根据需要声明变量.