LINUX.ORG.RU

Технология программирования на С


0

0

Подскажите, что почитать на тему программирование на С ?
Интересует не синтаксис, а технологии, стиль.
Конкретно, волнуют вопросы:
1) В С не рекомендуется использовать глобальные переменные, а где хранить глобальные данные ?
2) Советы и рекомендации для большого проекта.


> Подскажите, что почитать на тему программирование на С ?
> Интересует не синтаксис, а технологии, стиль.

Практика программирования. Керниган, Пайк.

Конкретно, волнуют вопросы:
1) В С не рекомендуется использовать глобальные переменные, а где 
хранить глобальные данные ?

Не правда.

2) Советы и рекомендации для большого проект

signal11
()

>Подскажите, что почитать на тему программирование на С ? >Интересует не синтаксис, а технологии, стиль.

>Конкретно, волнуют вопросы: >1) В С не рекомендуется использовать глобальные переменные, а где >хранить глобальные данные ? >2) Советы и рекомендации для большого проекта.

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

WFrag ★★★★
()

> 1) В С не рекомендуется использовать глобальные переменные, а где хранить глобальные данные ?

в C++ - не рекомендуют такое делать.

Большой проект - использовать ООП, естественно. На C - объектная модель. например, как в GTK, но может лучше тогда для больших проектов использовать C++, как и положено?

Spectr ★★★
()
Ответ на: комментарий от Spectr

Можно на C писать так: разделить программу на модули и продумать интерфейсы между ними. На модули можно делить по 2-м критериям.
1. по уровню (низший уровень - простейщие и достаточно низкоуровневые операциия, такие как выделение/освобождение памяти, операции ввода-вывода, арифметические операции, орбаботка прерываний, работа с потоками и т.п.;
средний уровень - надстройка над низшим уровнем, объединяет простейшие операции низшего уровня в болле высокоуровневые операции, присутствует минимальная логика выполнения программы;
высший уровень - аналогичен среднему, функции его интерфейса представляют толко самую общую логику выполнения программы).
2. Логически разделимые части программы в пределах одного уровня.

в main используются функции толко высшего уровня, например так:

app_init();
app_load_settings(settings_file);
app_run();
app_cleanup();

anonymous
()

> 1) В С не рекомендуется использовать глобальные переменные, а где хранить глобальные данные ?

в этой рекомендации есть две независимые части.

Первая -- имеется в виду что глобальные переменные типа засоряют общий неймспейс. Так как в Си нет классов, то остается хранить глобальные данные либо в статических переменных внутри функций, либо в глобальных переменных с говорящими названийми, префиксами и т.п.

Вторая -- глобальное состояние это вообще не очень хорошая вещь. Будут возникать проблемы с использованием твоего кода в более общем контексте, со многими потоками и т.п.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Самое главное - глобальная переменная (не константа!, static final в Java - рулез) - это гарантированный side effect. А вот именно их и нужно давить везде, где это только возможно.

Antichrist
()

Книжка Ален Голуб "Правила программирования на C & C++", маленькая, красненькая с
белым, в продаже давно не видел, но в библиотеке (Ленинка) наверное есть. 
Одна часть по чистому C, другая по C++. Точно отвечает на Ваши вопросы. 
Еще Майерс, но это только по C++,   "Эффективное программирование на С++",
2 книжки по 50 советов, но там не стиль, а именно эффективное программирование.
Хотя точной грани между двумя этими вопросами нет. 

anonymous
()

Что касается С++ - то там понятие глобальной переменной переродилось в глобальный 
объект, которые если и нужны, то 1 на весь проект да и то в очень редких специфических
случаях. Глобальные переменные - плохой стиль, но к нему иногда прибегают чтоб
выиграть в эффективности, что в обычном (прикладном) проекте делать не стоит.
Появление таких вещей скорее всего - ошибка проектирования. Хотя бывают исключения, 
которых по возможности нужно избегать. Глобальная переменная в большом проекте
с участием нескольких людей - потенциальная ошибка которая будет жить вечно.
Это нужно ??

anonymous
()
Ответ на: комментарий от anonymous

> Что касается С++ - то там понятие глобальной переменной переродилось в глобальный объект.

имхо, в большей степени, все таки в статическую переменную класса..

dilmah ★★★★★
()

не парься, на больших проектах используй приёмы ооп, иначе будет тоскливо если код тесно интегрированый. для глобалов правильно найти контекст, как говорил дядя Мейер, локализовать распространение знаний по программе, в си для прятанья есть static и структуры.. ну еще можно "сверху вниз" аргументами передавать, суть в том чтобы не отдалять (в своем восприятии) данные от их использования, при дисциплинированости и глобалы не страшны..

anonymous
()
Ответ на: комментарий от dilmah

>> Что касается С++ - то там понятие глобальной переменной переродилось в глобальный объект. 
>имхо, в большей степени, все таки в статическую переменную класса..

Не уверен. 
статическая переменная класса - переменная принадлежащая всему типу,
существует до создания объекта этого типа.
Глобальная переменная - переменная, которая видна из всех объектов
без ограничений и принадлежит всем объектам разных типов одновременно.
Так как в С++ (ОО язык) понятие переменой подменяется понятием объект 
определенного типа, то и глобальная переменная -> глобальный объект,
он может быть простым:  int gl_int;  или сложным:  class clGL_Int { ... };



anonymous
()
Ответ на: комментарий от anonymous

> в С++ (ОО язык) понятие переменой подменяется понятием объект

Ну ты и гонишь...

Крепко сидит мой резиновый шлем
На голове.
А я гоню, а я гоню,
Я гоню, гоню, гоню.
(c) Ноль. "Песня о безответной любви к Родине". "Ты - тормоз".

watashiwa_daredeska ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.