syntax error : missing ‘;’ before ‘type’ IN C
我试图完成我的代码。在为数组分配内存之后。我几乎没有错误,因此我无法编译代码。
我想得到你的帮助来完成这个程序谢谢!
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
1>c://users/
oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(27): error C2143: syntax error : missing ‘;’ before ‘type’ 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(28): error C2065: ‘text2’ : undeclared identifier 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(28): warning C4047: ‘=’ : ‘int’ differs in levels of indirection from ‘char **’ 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(29): error C2065: ‘text2’ : undeclared identifier 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(36): error C2065: ‘text2’ : undeclared identifier 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(36): error C2109: subscript requires array or pointer type 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(38): error C2143: syntax error : missing ‘;’ before ‘type’ 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(47): error C2065: ‘text2’ : undeclared identifier 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(47): error C2109: subscript requires array or pointer type 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(47): error C2198: ‘gets’ : too few arguments for call 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(50): error C2065: ‘text2’ : undeclared identifier 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(50): warning C4047: ‘function’ : ‘char **’ differs in levels of indirection from ‘int’ 1>c://users/ oni//documents//visual studio 2010//projects//lb11_12//lb11_12//lb_11_12_02.c(50): warning C4024: ‘PrintStr2’ : different types for formal and actual parameter 1 ========== Build: 0 succeeded, 1 failed, 0 up–to–date, 0 skipped ========== |
这是我的代码
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> #define LINES 4 #define length 100 void SortText1(char **text1); for (i=0 ; i<LINES; i++){ char **text2; for (i=0 ; i<LINES; i++){ char text3[LINES+LINES][length]; printf("Second string,Please enter %d names (only capital letters,without spaces):", LINES); PrintStr1(text1); printf("The first string sorted:/ void PrintStr1(char **text1){ |
您收到这些错误是因为您声明的局部变量不在范围的开头。
1
2 3 4 5 6 |
在作用域中间声明变量的能力最初是在 C99 标准中引入的,MS 编译器不支持该功能。
将所有局部变量声明移动到
在 C89 中,您只能将变量声明放在块的开头。此限制已在 C99 中删除。
但是 Visual Studio 2010 还不支持 C99。所以你必须坚持C89风格:
1
2 3 4 5 6 7 8 |
int main () //use int main()
{ int i; char **text1; char **text2; //Put all the declarations in the beginning // … return 0; } |
您的编译器似乎使用了旧版本的 C 标准。它不允许在块的中间声明。您需要将所有声明上移,以便它们都位于块的第一个可执行语句之前。
当然,只在函数体的开头指定局部变量。否则,C 编译器可能会给您一个编译错误。
较旧的 C 标准不允许您这样做(而 C 和较新的 C 标准可以这样做)。不过,您可以通过引入一个新主体来使用它:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
void function() { int i; i = 0; // Do some more things // AnotherInt is now"out of scope" and cannot be referenced any more |
在 ansi C 中,即 c89 中,您必须先在函数中声明所有变量。
Main 应该改为
1
2 3 4 5 6 7 8 9 10 |
void main () { int i; char **text1; char **text2; char text3[LINES+LINES][length]; // put the rest of your code here } |
如果你想在代码中间声明变量,你必须使用 c99(或者你的编译器可能有另一个选项)。
/这之后的一切都是吹毛求疵。
作为风格问题,您应该将#define 常量(如长度)大写。
你应该声明你的函数是静态的,这样它们就不会污染全局命名空间:
1
2 3 4 |
static void SortText1(char **text1);
static void SortText2(char **text2); static void PrintStr1(char **text1); static void PrintStr2(char **text2); |
Main 应该是 int main(int argv, char** argc) 而不是 void main()
除非您的编译器没有正确定义标准库,否则您不需要包含 malloc.h 和 conio.h。
1
|
for ( k=0 ; i<LINES ; k++)
|
应该把 i 改成 k。
缩进不一致。
您还应该一次编写一小段程序。编写许多函数然后尝试编译它们会导致这样的问题。如果您正在复制别人的作业,那么您当然只会编译一些失败的大页面,但是如果您自己编写,那么在两次编译之间使用短代码会更快。
/结束吹毛求疵
祝你的项目好运。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269284.html