2013-03-24 68 views
6

我正在编程一个Apache模块。在编程过程中,我打开了一个文件,但编译时出错。奇怪的语法错误在C中的if-else

32. static int wqb_handler(request_rec* req){ 
33. // Open and read our requested file 
34. const char* p_file = req->filename; 
35. 
36. FILE* req_file; 
37. if((req_file = fopen(p_file,"r"))==NULL){ 
38. return HTTP_NOT_FOUND; 
39. }else{ 
40.  fclose(req_file); 
41. } 
42. // Required variables 
43. const char* content_type_a = "text/html"; 
44. 
45. // Set Headers 
46. ap_set_content_type(req,content_type_a); 
47. if(req->header_only){ 
48. return OK; 
49. } 
50. 
51. 
52. return OK; 
53. } 

的问题是在功能,我在检查这是问题,我认为这个问题是if-else语句,代码是用C写的,而不是C++。

这些都是错误的:

C:/wqb/wqb1_apache2.c(43) : error C2143: syntax error : missing ';' in front of 'const' 
C:/wqb/wqb1_apache2.c(46) : error C2065: 'content_type_a' : undeclarated identifier 
+0

你的C编译器允许//注释吗? – uselpa 2013-03-24 19:16:49

+1

@MarkusDeibel我数3和3.看起来对我来说很好。 – Mysticial 2013-03-24 19:16:54

+0

@MarkusDeibel - 我计算每个3。 – 2013-03-24 19:17:22

回答

13

如果这是C,而你不是在C99模式(与C89编译器IE)编译,请记住,所有的声明必须直接跟随的开始块。 混合声明和代码是从C++导入的C99特性。

看来你正在用C模式下的Micrososft Visual Studio编译器进行编译。请注意,William H. Gates III选择完全忽略C99,并拒绝更新第三个千年的C实现。 :-)

+0

速度很快,我不知道C,非常感谢! (我会接受你的答案当stackoverflow让我接受答案...我需要等待几分钟) – Spamdark 2013-03-24 19:22:42

+0

这很好,知道,:P! – Spamdark 2013-03-24 19:33:39

-1

与您的问题的解决方案分享。这将有助于其他人更快地理解它。

提高你对运营商评论知识。

您在操作员中编写了太多不必要的{}。 例如,代码:

for(i = 0; i < N; i++) 
{ 
    printf("Hello"); 
}  

更简单/清除代码:

for(i = 0; i < N; i++) 
    printf("Hello"); 

....................... .................................................. ..

你的代码(原创)可以看起来如此(它更容易阅读和理解):

static int wqb_handler(request_rec* req) 
{ 
    /* Open and read our requested file */ 
    const char* p_file = req -> filename; 

    FILE* req_file; 
    if((req_file = fopen(p_file,"r"))==NULL) 
     return HTTP_NOT_FOUND; 

    else 
     fclose(req_file); 

    /* Required variables */ 
    const char* content_type_a = "text/html"; 

    /* Set Headers */ 
    ap_set_content_type(req,content_type_a); 

    if(req->header_only) 
     return 0; 

return OK; 
} 
+1

这完全无法解决问题,这不是支架风格或缩进之一。 – Jens 2013-03-24 19:59:14

+0

代码不完整。我不能忽视'{',因为在其他人中如果有多于一行的话。我只是试图编译看看它是如何看,如果它运作良好。 我知道有关'{'的功能,这不是我的问题的答案。 – Spamdark 2013-03-24 20:00:42

+0

好吧。但是你的代码很难阅读,没有任何怀疑。我对吗? 无论如何,如果您提供更多信息会更好。 (更多的代码,并在代码的评论中描述了这个问题的地方) 但是问题解决了,它真的很好! 请严格判断我。我是SrackOverflow的新手... – yulian 2013-03-24 20:18:33