Короткие руки и Горячие клавиши C / C ++ - PullRequest
0 голосов
/ 16 января 2012

Существуют ли какие-либо ресурсы, которые описывают большую часть сокращенных методов, которые могут предложить C и C ++?Существует много «дикого» кода, который не совсем совпадает с тем, чему учат в учебниках.Например, многие учебники учат вас разделять объявление и инициализацию переменных, но я вижу, что все время происходит обратное.

Итак, вот мой текущий вопрос: разрешает ли C процедуры без идентификатора типа?Снова, учебники говорят мне, что я должен, по крайней мере, вы типа void, если не указан другой тип.Тем не менее, я видел следующее:

procedure(){
//procedure stuff
}

, где в противном случае меня всегда учили, что вы должны, по крайней мере, сделать

void procedure(){
//procedure stuff
}

Я нахожусь в этом положении довольно часто, и я думаю, что этоСимптом не имел воздействия на проект / работу в команде на C или C ++.Мне трудно определить «компилируемый код», потому что во многих книгах учат определенным образом, но есть несколько способов выполнить одну и ту же задачу на практике.Благодаря.

Ответы [ 3 ]

4 голосов
/ 16 января 2012

Отсутствие возвращаемого типа в определении функции приводит к тому, что функция неявно возвращает int в C89.Начиная с C99 это больше не принимается, и реализация может отказаться от перевода программы с определением функции, в котором отсутствует тип возвращаемого значения.

Из документа обоснования C99:

В C89 всеспецификаторы типа могут быть опущены в спецификаторах объявления в объявлении.В таком случае подразумевается int.Комитет решил, что опасность, присущая этой функции, перевесила ее удобство, и поэтому она была устранена.

3 голосов
/ 16 января 2012

Если явного типа возврата нет, предполагается, что он равен int.Он существует по устаревшим причинам.

Еще одна устаревшая совместимость состоит в том, что вы также можете опускать типы аргументов:

add(a, b) { // a and b implicitly int
    return a + b;
}

Или вы можете объявлять типы аргументов ... по-другому ...

strlen2(s)
const char *s;
{
    int l = 0;
    while(*s++) l++;
    return l;
}

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

0 голосов
/ 16 января 2012

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

...