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
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
Ajoutez la commande de compilation
-c99
Visual Studio 2012 ne prend pas en charge C99, contrairement à Visual Studio 2013.
Référence : Wikipédia C99