Точка с запятой на концах if-утверждений и функций в C

Я просто столкнулся с некоторым кодом, который злоупотребляет точкой с запятой или использует точку с запятой для разных целей, о которой я не знаю.

Я нашел точки с запятой в конце if-утверждений и в конце функций. Например:

int main (int argc, char * argv[]) {
    // some code

    if (x == NULL) {
        // some code
    };  <-----

    // more code

    return 0;
}; <---

Он компилируется с помощью cc, а не gcc. Что делают эти точки с запятой? Я предполагаю, что нет никакой разницы, потому что компилятор просто рассматривает его как пустой оператор.

Ответы

Ответ 1

Они ничего не делают. Являюсь признаком того, кто плохо понимает этот язык, я подозреваю.

Если это исходный код, который вы, по-видимому, "владеете", я бы удалил код и попытался нежно поговорить с человеком, который его написал.

Ответ 2

этот фиктивный statememt. Образец идентичен

if (x == NULL) {
 // some code
 do_something_here();
}

/* empty (dummy statement) here */ ;

// more code
some_other_code_here();

Ответ 3

Вы правы, компилятор считает их пустыми. Они не нужны, я думаю, программист как-то думал, что они были.

Ответ 4

Первая точка с запятой (после оператора if) представляет собой просто пустое выражение, которое ничего не делает. Я не вижу смысла иметь его там.

Вторая точка с запятой (после функции) является ошибкой, поскольку она находится вне любого блока кода. Компилятор должен дать предупреждение.

Ответ 5

Эти точки с запятой не нужны (как вы сказали, это пустые утверждения). Ваш код компилируется с помощью gcc, при условии, что определяется "x" (отметьте http://www.codepad.org). Нет причин, по которым компилятор C отказывается компилировать ваш код.

Ответ 6

Я думаю, что автор, возможно, собирался что-то вроде:

if(condition for tbd block)
    ;
else {
    //Some code here
}

который вы могли бы сделать, если бы вы были кодом леса и все еще хотели его скомпилировать. Там хороший шанс, что это просто ошибка, которую предлагает Джон.

Ответ 7

Эти точки с запятой бесполезны, как уже указывали другие. Единственное, что я хочу добавить, это то, что IMO, они оптимизированы, так или иначе, то есть компилятор не создает для них никакого реального кода.