реклама на сайте
подробности

 
 
6 страниц V  « < 2 3 4 5 6 >  
Reply to this topicStart new topic
> Стиль программирования на Си, описание функции
defunct
сообщение Apr 2 2008, 09:58
Сообщение #46


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ Apr 1 2008, 15:40) *
Но ведь никто не рекомендует отказаться от них и начать писать p = p + 1; Или уже рекомендуют? wink.gif

Delphi'сты рекомендуют smile.gif

Цитата(dxp @ Apr 1 2008, 15:50) *
Как насчет вышеприведенного примера про
Код
#define I 7
#define N 2
#define C 0

?

Я еще люблю применять
#define K 1024
#define M K*K

Просто кому придет в голову объявить переменную ОДНОЙ ЗАГЛАВНОЙ буквой?

Цитата(SasaVitebsk @ Apr 2 2008, 00:17) *
smile.gif А мне так понравилось. По сравнению с Паскалем, к примеру. smile.gif

++ / -- - просто создан для индексации массивов.
тоже неплохо смотрится в условиях.

а повсеместно тыкать ++ / -- ни ни, я отдаю предпочтение p += 1 вместо ++;
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 2 2008, 10:15
Сообщение #47


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(defunct @ Apr 2 2008, 12:58) *
Delphi'сты рекомендуют
Они сишникам не указ, и даже не авторитет.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 2 2008, 11:55
Сообщение #48


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(zltigo @ Apr 1 2008, 22:44) *
Самостоятельные препроцессоры "C" не редкость, да и тем-же GCC прогнать можно... Посему на везение уповать совсем незачем smile.gif.
Тут можно спорить о возможном несовпадении (один из них или оба могут не польностью соответствовать стандрату и проверка одним другого будет неадекватной). Но в целом он чаще есть, чем его нет. Я их даже эпизодически прикручивал для своих нужд (например, в pldasm какие-то кусочки пихал для облегчения написания).

Цитата(zltigo @ Apr 1 2008, 22:44) *
А почему-бы и нет? Есть свои приятственные фичи в C++ компиляторах и для почти сишного кода. А как, например в смешанном коде без немерянных извращений работать с плюсовым кодом?
Лично я в большинстве случаев так и поступаю.

Это если говорить о сложившейся ситуации. И я тоже так делаю иногда, хотя и inline-функции, и объявление переменных по месту, включая счётчики в циклах for - есть в C99, просто до сих пор не все поддерживают. Да и в С99 есть не менее вкусная возможность инициализировать элементы структур/массивов по имени, в С++ этого нет. Так что... Где найдёшь, где потеряешь...

А если говорить на момент "до того", когда язык С++ только сбивался и ещё и люди не привыкли пользоваться "С-совместимыми" расширениями С++, и "массы текстов" не набралось, то кто мешал "таки повыкидывать из С++ тяжкое наследие С, не приносящее ничего, кроме вреда"?
По поводу смешанных проектов - никто не мешает весь С-текст держать в отдельных файлах, компилировать в С-режиме со всеми функциональными макросами, а потом линковать с С++ - программой, скомпилированной в С++ режиме.
Ввели бы для условной компиляции что-то как-бы похожее, но интегрированное в язык, а не являющееся отдельным проходом. Как результат в условии компиляции можно было бы применять и enum-определённые константы и т.п. Кто мешал? И не было бы споров smile.gif Ну скучал бы я по старым добрым макросам smile.gif


Цитата(_Pasha @ Apr 2 2008, 08:58) *
А насчет пред/пост инкремента, например, действительно генератор граблей.
Где? Как?
Может, генератором граблей есть голова пишущего, не разобравшаяся в побочных эффектах и точках следования?
Если так, то надо требовать изменения консти стандарта С таким образом, чтобы все переменные по умолчанию были volatile, так как от непонимания этого момента "глюков" ещё больше.
Ну или просто компилировать свои программы с выключенной оптимизацией.


Цитата(defunct @ Apr 2 2008, 11:58) *
а повсеместно тыкать ++ / -- ни ни, я отдаю предпочтение p += 1 вместо ++;
lol.gif
Шаманим потихоньку?

Стандарт С:
Цитата
6.5.3.1 Prefix increment and decrement operators
...
Semantics
2 The value of the operand of the prefix ++ operator is incremented. The result is the new value of the operand after incrementation. The expression ++E is equivalent to (E+=1). See the discussions of additive operators and compound assignment for information on constraints, types, side effects, and conversions and the effects of operations on pointers.
3 The prefix -- operator is analogous to the prefix ++ operator, except that the value of the operand is decremented.

Цитата
6.5.16.2 Compound assignment
Semantics
3 A compound assignment of the form E1 op= E2 differs from the simple assignment expression E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once.


++E эквивалентно E+=1 всегда
любое из них эквивалентно E = E + 1 в подавляющем большинстве случаев.
Разница будет, например, для a[i] += 1; в случае, когда i объявлено как volatile, иначе выражения семантически эквивалентны.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 2 2008, 12:15
Сообщение #49


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ Apr 2 2008, 13:55) *
lol.gif
Шаманим потихоньку?
++E эквивалентно E+=1 всегда

Это я в курсе smile.gif
Дело принципа и привычки, от ++ в глазах рябит. Как и написал выше ++/-- использую только для индексации и в условиях:

while( zz--)
{
*p++ = xx;
p[ idx++] = xx;
}
...

а когда стоит вопрос одинокого инкремента какой-то переменной или указателя то пользую

p += 1;
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 2 2008, 12:34
Сообщение #50


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(defunct @ Apr 2 2008, 12:58) *
Просто кому придет в голову объявить переменную ОДНОЙ ЗАГЛАВНОЙ буквой?
Ну как же? локальную переменную типа char для цикла в puts так и хочется обозвать заглавной C.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 2 2008, 12:39
Сообщение #51


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Apr 2 2008, 14:34) *
Ну как же? локальную переменную типа char для цикла в puts так и хочется обозвать заглавной C.

кому как, во всех реализациях, что я встечал параметр put'ов описан прописной "c" или (чаще) "ch".
и лок. переменную почему бы не назвать одним из этих имен. ;>
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 2 2008, 12:40
Сообщение #52


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(defunct @ Apr 2 2008, 14:15) *
Это я в курсе smile.gif
Дело принципа и привычки, от ++ в глазах рябит.
Фух, а то я уж, виноват, подумал, что это способ уменьшения размера глюкодрома по причине врождённой глюкавости операторов ++ --.
Привычки - это нормально, ненормально когда их оправдывают высокими соображениями smile.gif


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 2 2008, 12:43
Сообщение #53


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ Apr 2 2008, 14:40) *
Фух, а то я уж, виноват, подумал, что это способ уменьшения размера глюкодрома по причине врождённой глюкавости операторов ++ --.

Я виноват что смайлик забыл поставить после "ни ни" smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2008, 15:01
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ReAl @ Apr 2 2008, 14:55) *
По поводу смешанных проектов - никто не мешает весь С-текст держать в отдельных файлах, компилировать в С-режиме со всеми функциональными макросами, а потом линковать с С++ - программой, скомпилированной в С++ режиме.

Да? А как вызывать "С++" функции из "С"? Через псевдосишные сишные обертки? - нет спасибо..


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sKWO
сообщение Apr 2 2008, 16:40
Сообщение #55


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Позволю небольшой отрывок кода, извиняюсь что немного прерываю...
доступ к флагам
Код
/****************************************************************************
Системные флаги
****************************************************************************/
#define System_Flags GPIOR0
enum
    {
        KEY_VALID     = (1 << 0),
        NEED_FLASH    = (1 << 1),
        SOUND_ENABLE  = (1 << 2)
    };

void  main (void){
  if(System_Flags & KEY_VALID) System_Flags &= ~NEED_FLASH;
  if(System_Flags & NEED_FLASH) System_Flags &= ~SOUND_ENABLE;
};

тот же код но с препроцессором
Код
#define System_Flags GPIOR0
#define KEY_VALID  (1 << 0)
#define NEED_FLASH  (1 << 1)
#define SOUND_ENABLE (1 << 2)
void  main (void){
  if(System_Flags & KEY_VALID) System_Flags &= ~NEED_FLASH;
  if(System_Flags & NEED_FLASH) System_Flags &= ~SOUND_ENABLE;
};

Даёт одинаковый код smile.gif
Код
//   18   if(System_Flags & KEY_VALID) System_Flags &= ~NEED_FLASH;
        SBIC    0x1E, 0x00
        CBI     0x1E, 0x01
//   19   if(System_Flags & NEED_FLASH) System_Flags &= ~SOUND_ENABLE;
??main_0:
        SBIC    0x1E, 0x01
        CBI     0x1E, 0x02


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 2 2008, 18:34
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вот об этом я и говорю - богатство выбора в рамках языка.

При написании сложных операторов с большим количеством операций по типу ++/-- могут быть грабли. Они достаточно подробно описаны даже в учебниках. Но, как мне кажется, не стоит перегружать операторы. Это неудобно для отладки к примеру и ухудшает читаемость. С другой стороны, совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 2 2008, 18:53
Сообщение #57


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ReAl @ Apr 2 2008, 15:40) *
...способ уменьшения размера глюкодрома по причине врождённой глюкавости операторов ++ --.
Привычки - это нормально, ненормально когда их оправдывают высокими соображениями smile.gif


Есть совершенно нормальный предел восприятия кракозябров, ибо ни Вы, ни я не начинали учить буквы с "Hello, world!" Т.е. чистая психология восприятия. Поэтому, когда мне закинут в уши мысль типа : " зато на Паскале написана масса давно и надежно работающих программ для NASA" - я поверю. Потому что в Паскале нет возможности извратить язык и сделать нечто подобное тому, что описано в первых постах.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 2 2008, 19:19
Сообщение #58


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(SasaVitebsk @ Apr 2 2008, 22:34) *
С другой стороны, совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится

Более того, при написании 3мя операторами оно может и существенно улучшиться 07.gif
если знаешь как правильно разбить эти 3 оператора на нужное количество строк...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2008, 19:30
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ Apr 2 2008, 21:34) *
... совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится

Компиляторы умнеют, но тем не менее пока не умнее Вас и на подсказку вполне вероятно, ответят лучшим кодом.


Цитата(singlskv @ Apr 2 2008, 22:19) *
Более того, при написании 3мя операторами оно может и существенно улучшиться 07.gif
если знаешь как правильно разбить эти 3 оператора на нужное количество строк...

Вы знаете? Тогда пример в студию......

Цитата(_Pasha @ Apr 2 2008, 21:53) *
Поэтому, когда мне закинут в уши мысль типа...

smile.gif ну зачем-же гордится своей наивностью?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 2 2008, 19:53
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Хотя я в NASA не работал, но по слухам там не применялся Pascal. Вроде бы Modula или что-то подобное. Знаю точно, что чисто объектно ориентированный язык. И именно из соображений безопасности и защищённости. На данный момент, вроде проскакивали сообщения, что принято решение о применении C++ в качестве базового языка.
Go to the top of the page
 
+Quote Post

6 страниц V  « < 2 3 4 5 6 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01601 секунд с 7
ELECTRONIX ©2004-2016