Сколько стилей написания функций есть в C? - PullRequest
6 голосов
/ 11 марта 2012

Пока я знаю два стиля:

/* 1st style */
int foo(int a) {
return a;
}

/* 2nd style */
int foo(a)
int a;
{
return a;
}

(Я видел, как кто-то пишет коды во 2-м стиле. Сначала я был удивлен, но 2-й стиль работал (в gcc, как я тестировал). Это вызвало у меня любопытство, и я хотел задать этот вопрос.)

Ответы [ 4 ]

11 голосов
/ 11 марта 2012

Я не буду называть эти стили, но варианты языков (или диалекты).

Стиль кодирования - это набор необязательных соглашений, которые могут не соблюдаться.Например, некоторые стили кодирования требуют, чтобы все имена макросов были прописными (но ваш код будет компилироваться, если вы не будете следовать этому правилу).

Ваш "2 nd стиль"называется Kernighan & Ritchie C .Это старый C, определенный в конце 1970-х годов (в самом первом издании известной книги Кернигана и Ричи по C ; последующие издания соответствовали более поздним стандартам C).Это устаревший язык.

Современные компиляторы часто следуют стандарту C99 ISO (опубликован в 1999 году), который был заменен новым стандартом C11 (опубликованв 2011 г.).

Компиляторы GCC принимают стандарт C99 с программным аргументом -std=c99.Я настоятельно рекомендую скомпилировать с gcc -Wall -std=c99;Последние компиляторы GCC (то есть 4.6 и 4.7) принимают -std=c11 IIRC для более нового стандарта C11 .

Не кодируйте сегодня в старых Кернигане и РичиДиалект C: он устарел и все реже поддерживается компиляторами.IMHO C99 - хороший стандарт, которому нужно следовать, если вы осторожны.И извлекать выгоду из некоторых его функций (в частности, возможность смешивать объявления и операторы внутри блока; более старые диалекты C необходимы для размещения всех объявлений в начале блока.).

Стандарт улучшился, в частности, потому что он добавил функции и более точен по отношению к существующим системам и практикам (например, многоядерные процессоры)

2 голосов
/ 11 марта 2012

Существуют (как минимум) два недостатка при использовании 2-го стиля:

  1. Если также отсутствует прототип функции, компилятор не будет проверять правильный тип аргумента .И, если я правильно помню, число аргументов также не будет проверено.
  2. Этот стиль (K & R, 1st Ed) действителен только для обратной совместимости ... когда-нибудь, стандарт C (возможно) запретит этот стиль и ваши программы остановятся.

Кроме того, для лучшей читабельности вы можете поместить тип возвращаемого значения функции в отдельной строке (особенно полезно с longвозвращаемые типы, такие как unsigned long int и заголовки):

int 
foo(int a) 
{
    return a;
}
0 голосов
/ 11 марта 2012

Второй стиль является более старым и поддерживается для обратной совместимости.Я не знаю каких-либо других стилей, но вы должны использовать первый (более новый) стиль.Второй (более старый) стиль уже устарел, когда я начал работать с C (1994).

0 голосов
/ 11 марта 2012

Второй - это синтаксис в стиле K & R C, но сейчас он устарел.Оформить заказ @Basile Starynkevitch's answer.

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