6

我正在编写一个apache模块。在编程过程中,我正在打开一个文件,但在编译时出现错误。

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
4

2 回答 2

14

如果这是 C,并且您不是在 C99 模式下编译(即使用 C89 编译器),请记住所有声明必须直接跟在块的开头之后。混合声明和代码是从 C++ 导入的 C99 功能。

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

于 2013-03-24T19:16:34.217 回答
-2

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

提高您对运算符评论的了解。

您在运算符中编写了太多不必要{的内容}。例如,您的代码:

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;
}
于 2013-03-24T19:45:53.493 回答