nginx - Bahasa C, vc compiler cl, bagaimana untuk menyokong pembolehubah tanpa perlu mengisytiharkannya pada permulaan fungsi
淡淡烟草味
淡淡烟草味 2017-05-16 17:26:29
0
3
978

Windows, gunakan vc compiler cl.exe untuk menyusun modul pihak ketiga nginx, dan terdapat mesej ralat yang serupa dengan kod ini:

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;

Ralatnya ialah 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

Selepas menyemak, sebabnya ialah: pengkompil C memerlukan pengisytiharan pembolehubah untuk diletakkan di kepala blok fungsi, tetapi C++ tidak mempunyai keperluan sedemikian. Hanya letakkan tiga pembolehubah yang diisytiharkan pada permulaan fungsi.

Kod yang sama boleh disusun dan dihantar di bawah gcc.

Sila beritahu saya jika terdapat sebarang pilihan kompilasi dalam vc yang boleh menyokong C yang lebih maju. Pengkompil vc yang saya gunakan sudah menjadi yang disertakan dengan vs2012

淡淡烟草味
淡淡烟草味

membalas semua(3)
为情所困

Tidak boleh.
Oleh kerana VC menyokong standard C89 walaupun pada tahun 2013 yang terkini, kerana ia pada asasnya ialah pengkompil C++, dan sintaks yang anda perlukan hanya disokong selepas standard C99, jadi GCC boleh menyusun dan lulus.

Ada dua penyelesaian:
Salah satunya ialah menukar kod untuk mematuhi piawaian C89.
2. Compile menggunakan mingw

刘奇

Tambahkan arahan kompilasi

-c99

曾经蜡笔没有小新

Visual Studio 2012 tidak menyokong C99, tetapi Visual Studio 2013 menyokong.
Rujukan: Wikipedia C99

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan