2013-03-24 31 views
6

Tôi đã lập trình một mô-đun apache. Ở giữa chương trình, tôi đã mở một tệp, nhưng tôi đã gặp lỗi khi biên dịch.Lỗi cú pháp lạ trong C trong 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. } 

Vấn đề là trong chức năng đó, tôi được kiểm tra đó là vấn đề, và tôi nghĩ rằng vấn đề là báo cáo kết quả if-else, các mã được viết bằng C, không phải trong C++.

Đây là những lỗi:

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ó phải // nhận xét được cho phép trong trình biên dịch C của bạn không? – uselpa

+1

@MarkusDeibel Tôi đếm 3 và 3. Có vẻ ổn với tôi. – Mysticial

+0

@MarkusDeibel - Tôi đếm 3 trong số đó. –

Trả lời

13

Nếu đây là C, và bạn không biên dịch trong chế độ C99 (tức là với một trình biên dịch C89), hãy nhớ rằng tất cả các tờ khai phải được trực tiếp sau khi bắt đầu một khối. Khai báo và mã hỗn hợp là tính năng C99 được nhập từ C++.

Dường như bạn đang biên dịch bằng trình biên dịch Micrososft Visual Studio trong chế độ C. Lưu ý rằng William H. Gates III đã chọn bỏ qua hoàn toàn C99 và từ chối cập nhật triển khai C cho thiên niên kỷ thứ ba. :-)

+0

Thật nhanh, tôi không biết về C, cảm ơn rất nhiều! (Tôi sẽ chấp nhận câu trả lời của bạn khi stackoverflow cho phép tôi chấp nhận câu trả lời ... Tôi cần phải đợi vài phút) – Spamdark

+0

Điều đó tốt để biết,: P! – Spamdark

-1

Chia sẻ với giải pháp vấn đề của bạn. Nó sẽ giúp những người khác hiểu nó nhanh hơn.

Cải thiện kiến ​​thức của bạn về các nhà khai thác ý kiến ​​.

Bạn đang viết quá nhiều không cần thiết {} trong các toán tử. Ví dụ, mã của bạn:

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

More đơn giản/code rõ ràng:

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

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

mã của bạn (bản gốc) có thể trông như vậy (Nó dễ dàng hơn để đọc và hiểu.):

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

Điều này hoàn toàn không giải quyết được vấn đề, mà không phải là một trong những phong cách brace hoặc thụt lề. – Jens

+0

Mã chưa hoàn chỉnh. Tôi không thể bỏ qua '{' vì có nhiều hơn 1 dòng bên trong và nếu có. Tôi chỉ cố gắng biên dịch để xem làm thế nào là tìm kiếm và nếu nó hoạt động tốt. Tôi biết tính năng này về '{' và đó không phải là câu trả lời cho vấn đề của tôi. – Spamdark

+0

Vâng. Nhưng mã của bạn khó đọc, không có bất kỳ nghi ngờ nào. Tôi có đúng không? Dù sao, sẽ tốt hơn nếu bạn trình bày thêm thông tin. (thêm mã và được mô tả trong các nhận xét của mã nơi có vấn đề) Nhưng vấn đề được giải quyết và nó thực sự tốt! Xin hãy đánh giá tôi thật kỹ. Tôi mới dùng SrackOverflow ... – yulian