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機能です。

MicrososftVisualStudioコンパイラをCモードでコンパイルしているようです。William H. Gates IIIは、C99を完全に無視することを選択し、3千年紀の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 に答える