01/10/2018, 17:36

Lệnh goto trong C++

Cho em hỏi các tiền bối có ai sử dụng lệnh goto trong lúc lập trình không, do em nghe thầy bảo là lệnh goto dễ gây lỗi nên không được sử dụng nữa.

rogp10 viết 19:48 ngày 01/10/2018

Một số trường hợp chỉ cần dùng break; (ra khỏi vòng lặp) hay continue; (nhảy lên 1 bước nữa) là đủ xài. Căng hơn thì try… catch…

Tao Không Ngu. viết 19:36 ngày 01/10/2018

Hi Le Ly Vinh.
Nếu bạn code một lần sau đó bỏ không đọc lại nữa thì dùng không vấn đề gì. Tuy nhiên nếu cấn đọc lại code thì sẽ làm khó người đọc.

明玉 viết 19:47 ngày 01/10/2018

Sức mạnh càng cao, trách nhiệm càng lớn. Cứ nhớ thế cho mình khi bạn dùng goto.

Hung viết 19:41 ngày 01/10/2018

Trong C++ có RAII rồi nên ít khi bạn dùng.
Tuy nhiên, trong C có 1 trường hợp dùng goto dùng để clean up (giải phóng memory, resource, connection), hoặc trả về status (success, error code)

static _buffer_info_t*
_buffer_info_new(PyObject *obj)
{
    ...

    info = malloc(sizeof(_buffer_info_t));
    if (info == NULL) {
        PyErr_NoMemory();
        goto fail;
    }

    ...

    err = _buffer_format_string(descr, &fmt, obj, NULL, NULL);
    Py_DECREF(descr);
    if (err != 0) {
        free(fmt.s);
        goto fail;
    }

    ...

fail:
    free(info);
    return NULL;
}

Trong các ngôn ngữ mới thì họ giải quyết cách này bằng keyword defer. (Go, Swift)


Tham khảo: https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/buffer.c

Nguyễn Đình Biển viết 19:50 ngày 01/10/2018

Mình toàn coi mặc định goto là lệnh cấm sử dụng Không phải vì khó sử dụng mà nó phá vỡ tính tuần tự của chương trình

Bài liên quan
0