Точка с запятой в конце if-операторов и функций в C - PullRequest
19 голосов
/ 11 мая 2009

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

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

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

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

    // more code

    return 0;
}; <---

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

Ответы [ 7 ]

33 голосов
/ 11 мая 2009

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

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

7 голосов
/ 11 мая 2009

это фиктивный Statememt. Ваш образец идентичен

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

/* empty (dummy statement) here */ ;

// more code
some_other_code_here();
5 голосов
/ 11 мая 2009

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

2 голосов
/ 11 мая 2009

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

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

1 голос
/ 11 мая 2009

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

0 голосов
/ 11 мая 2009

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

0 голосов
/ 11 мая 2009

Я думаю, что автор, возможно, хотел что-то вроде:

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

, что вы могли бы сделать, если бы вы создавали код и все еще хотели его скомпилировать. Хотя есть большая вероятность, что это просто ошибка, как предлагает Джон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...