Maison  >  Questions et réponses  >  le corps du texte

nginx - Langage C, compilateur VC CL, comment prendre en charge les variables sans avoir à les déclarer au début de la fonction

Windows, utilisez le compilateur vc cl.exe pour compiler le module tiers de nginx, et il y a un message d'erreur similaire à ce code :

static ngx_int_t
ngx_http_zip_main_request_header_filter(ngx_http_request_t *r)
{
    ngx_http_variable_value_t  *vv;
    ngx_http_zip_ctx_t         *ctx;

    if ((ctx = ngx_http_get_module_ctx(r, ngx_http_zip_module)) != NULL)
        return ngx_http_next_header_filter(r);

    if ((vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t))) == NULL) 
        return NGX_ERROR;

    /* Look for X-Archive-Files */
    ngx_int_t variable_header_status = NGX_OK;

L'erreur est ngx_int_t variable_header_status = NGX_OK; :

mod_zip/ngx_http_zip_module.c(195) : error C2275: 'ngx_int_t' : illegal use of t
his type as an expression

Après vérification, la raison est la suivante : le compilateur C nécessite que la déclaration de variable soit placée en tête d'un bloc fonctionnel, mais C++ n'a pas une telle exigence. Mettez simplement les trois variables déclarées au début de la fonction.

Le même code peut être compilé et passé sous gcc.

Veuillez me dire s'il existe des options de compilation dans vc qui peuvent prendre en charge un langage C plus avancé. Le compilateur vc que j'utilise est déjà celui fourni avec vs2012

淡淡烟草味淡淡烟草味2692 Il y a quelques jours937

répondre à tous(3)je répondrai

  • 为情所困

    为情所困2017-05-16 17:28:29

    Pas question.
    Parce que VC prend en charge la norme C89 même dans la dernière version de 2013, car il s'agit essentiellement d'un compilateur C++ et que la syntaxe dont vous avez besoin n'est prise en charge qu'après la norme C99, afin que GCC puisse compiler et transmettre.

    Il existe deux solutions :
    La première consiste à modifier le code pour se conformer à la norme C89.
    2. Compilez avec mingw

    répondre
    0
  • 怪我咯

    怪我咯2017-05-16 17:28:29

    Ajoutez la commande de compilation

    -c99

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 17:28:29

    Visual Studio 2012 ne prend pas en charge C99, contrairement à Visual Studio 2013.
    Référence : Wikipédia C99

    répondre
    0
  • Annulerrépondre