Си для начинающих. Си для чайников.

Транзисторы, резисторы, микросхемы, микроконтроллеры. C/C++, C#, PHP, HTML и пр.

Модератор: KopylovSergey

Ответить
Аватара пользователя
admin
Администратор
Сообщения: 1103
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Екатеринбург
Контактная информация:

Си для начинающих. Си для чайников.

Сообщение admin » 03 ноя 2012, 14:26

В своё время язык Си казался чем-то недостижимым - "а как..., а что..., а почему..., да это же...., ну куда мне... :-): ", ну и прочие заморочки мозга :-):
Не знаю почему так автор назвал, но это реально объяснено на "пальцах".

P.S. после усвоения предложенного материала, необходимо опираться на "Язык Си" Керниган, Ричи.
Без проблем находиться в инете!
Вложения
c.rar
(216.56 КБ) 1384 скачивания

Аватара пользователя
admin
Администратор
Сообщения: 1103
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Екатеринбург
Контактная информация:

Re: Си для начинающих. Си для чайников.

Сообщение admin » 27 ноя 2014, 22:43

Объявление структуры в *.h файле. Объявление структуры как extern

В *.h файле обьявляется следующее:

Код: Выделить всё

struct _Foo
{
    ...
};    // Это обьявление структуры как типа
extern struct _Foo Foo;   // Это обьявление внешнего обьекта Foo типа struct _Foo
В одном *.c файле определяется обьект:

Код: Выделить всё

#include "*.h"
...
struct _Foo Foo;   // Это определение обьекта Foo типа struct _Foo
В любом другом *.c файле, имеющем строку #include "*.h", обьектом Foo можно пользоваться.

Как использовать extern?

extern используется при объявлении переменной, указывая компилятору на то, что определение переменной используется далее в программе (в других файлах)

Код: Выделить всё

/* Определение неинициализированной глобальной переменной */
int x_global_uninit;
 
/* Определение инициализированной глобальной переменной */
int x_global_init = 1;  
 
/* Определение неинициализированной глобальной переменной, к которой 
 * можно обратиться по имени только в пределах этого C файла */
static int y_global_uninit; 
 
/* Определение инициализированной глобальной переменной, к которой 
 * можно обратиться по имени только в пределах этого C файла */ 
static int y_global_init = 2; 
 
/* Объявление глобальной переменной, которая определена где-нибудь
 * в другом месте программы */
extern int z_global;
 
/* Объявлени функции, которая определена где-нибудь другом месте 
 * программы (Вы можете добавить впереди "extern", однако это 
 *  необязательно) */
int fn_a(int x, int y);
 
/* Определение функции. Однако будучи помеченной как static, её можно 
 * вызвать по имени только в пределах этого C  файла. */ 
static int fn_b(int x)
{
  return x+1;
}
 
/* Определение функции. */
/* Параметр функции считается локальной переменной. */
int fn_c(int x_local)
{
  /* Определение неинициализированной локальной переменной */
  int y_local_uninit;
  /* Определение инициализированной локальной переменной */
  int y_local_init = 3;
 
  /* Код, который обращается к локальным и глобальным переменным,
   * а также функциям по имени */ 
  x_global_uninit = fn_a(x_local, x_global_init);
  y_local_uninit = fn_a(x_local, y_local_init);
  y_local_uninit += fn_b(z_global);
  return (x_global_uninit + y_local_uninit);
}

Аватара пользователя
admin
Администратор
Сообщения: 1103
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Екатеринбург
Контактная информация:

Re: Си для начинающих. Си для чайников.

Сообщение admin » 17 мар 2015, 00:11

Отличная книга по правилам программирования на Си и Си++

"Верёвка достаточной длины чтобы ... выстрелить себе в ногу. Правила программирования на С и C++" Ален И. Голуб \ Allen I. Holub

Аватара пользователя
admin
Администратор
Сообщения: 1103
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Екатеринбург
Контактная информация:

Re: Си для начинающих. Си для чайников.

Сообщение admin » 09 июн 2015, 19:49

Заголовочные файлы (*.h)
Заголовочные файлы устанавливают соглашения по использованию общих идентификаторов (имен) в различных частях программы. Если, например, функция func () реализована в файле а.с, а вызывается в файле Ь.с, то в оба файла требуется включить директиву #inciude "имя заголовочного файла", содержащий объявление (прототип) функции func ().


Ответить