Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.62/50: Рейтинг темы: голосов - 50, средняя оценка - 4.62
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
1

Как правильно определить typedef? Решено

07.04.2014, 23:07. Просмотров 9069. Ответов 29
Метки нет (Все метки)

Кто подскажет как правильно определить следующую строку:

Код
typedef void (*VECTORS)();
Есть следующая конструкция:

*.h:

Код
//========================================================================
typedef void (*VECTORS)();
//========================================================================

//========================================================================
extern u08 _proc_eds_main;
//------------------------------------------------------------------------
typedef enum proc_eds_states
{
#define STATE(name) st_##name,
#include "_proc_eds_main.h"
#undef STATE

PROC_EDS_MAIN_STATES

} proc_eds_states;
//------------------------------------------------------------------------
extern __flash VECTORS_EDS proc_eds_func [PROC_EDS_MAIN_STATES];
//------------------------------------------------------------------------
*.c

Код
//========================================================================
__flash VECTORS_EDS proc_eds_func [PROC_EDS_MAIN_STATES] =
{
#define STATE(name) name,
#include "_proc_eds_main.h"
#undef STATE
};
//------------------------------------------------------------------------
void proc_eds (void)
{
if (_proc_eds_main < PROC_EDS_MAIN_STATES)
{
proc_keys_pu ();
check_keys_buf (keys_pu_buf, _proc_eds_main, tab_homdlers_keys_pu_main);
proc_eds_func [_proc_eds_main] ();
}
//
}
//------------------------------------------------------------------------
void Proc_Eds_Main_Init (void)
{
_proc_eds_main = st_Proc_Eds_Main_Set_Manual;
}
__proc_eds_main.h:

Код
//************************************************************************
//************************ Aeaaiue aaoiiao *******************************
//************************************************************************

//========================================================================
STATE (Proc_Eds_Main_Init)
STATE (Proc_Eds_Main_Set_Manual)
STATE (Proc_Eds_Main_Manual)
STATE (Proc_Eds_Main_Set_Automat)
STATE (Proc_Eds_Main_Automat)
STATE (Proc_Eds_Main_Stop)
//========================================================================
Проблема в том, что VECTORS видна только в пределах одного модуля. Куда бы я ни ставил
Код
typedef void (*VECTORS)();
ошибка компиляции.
Делаю VECTORS_1, VECTORS_2 - все нормально.
Есть способ определить так, чтобы распространялось на все модули?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 23:07
Ответы с готовыми решениями:

Как правильно пользоваться typedef для декларации типа указателя на функцию?
Мне нужны будут функции, принимающие параметр-указатель на функции с одним и тем же списком...

Как правильно удалить строку (Rows.Delete) (Решено)
Самое интересное, что метод Delete объекта Rows удаляет не указанную строку, а только первую её...

Правильно ли все решено и как можно было упростить программу?
Напишите программу, которая в последовательности натуральных чисел находит среднее арифметическое...

[РЕШЕНО] STM. Как определить загрузку процессора?
Собираю проект для STM32F4. Среда Keil. Возник вопрос: Как определить загрузку процессора? Учитывая...

Typedef void F(); typedef для типа функции через идентификатор
Здравствуйте цитата из typedef MSDN в интернете мне удалось нарыть только один конкретный...

29
div
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
09.04.2014, 23:52 2
А #include есть?
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
10.04.2014, 05:39 3
__flash VECTORS_EDS proc_eds_func [PROC_EDS_MAIN_STATES] =
{
#define STATE(name) name,
#include "_proc_eds_main.h"
#undef STATE
};
Что это за изврат? К тому же у вас здесь ошибка: запятая перед закрывающей скобкой.
Конечно понятно что .h файл тупо вставляется в исходник, но нельзя ж его так использовать не по назначению.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 06:38 4
Цитата Сообщение от flomdger
Что это за изврат? К тому же у вас здесь ошибка: запятая перед закрывающей скобкой.
Конечно понятно что .h файл тупо вставляется в исходник, но нельзя ж его так использовать не по назначению.
Где вы увидели ошибку? Никакого изврата. X-macro. Пример мне дал один человек достаточной квалификации и с приличным опытом работы. Который собаку съел на этих макросах. Так что, если вы дилетант в этих вопросах, проходите мимо. Я пока еще дилетант, прямо признаю. Но когда я отправлял для проверки и консультации один из примеров тому человеку, он никаких ошибок не увидел. К тому же, я работаю в IAR, а он достаточно строг к косякам. И просто не скомпилирует программу, если будут ошибки.
0
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
10.04.2014, 07:41 5
"typedef void (*VECTORS)()" -- верная конструкция языка, если "VECTORS" не определен ранее (например, как какой-нибудь макрос).

Кстати, я не нашел в вашем коде использования VECTORS.

И да, надеюсь вы знаете что этот тайпдеф определяет указ. на функцию произвольного числа аргументов (а не нулевого)?

И да, тайпдеф как и любое другое определение действует только в пределах одного модуля. Поэтому нужно его выносить в .h и включать в тех модулях, где он требуется.

И да, код ужасен независимо от того, кто его писал.

flomdger, запятая перед закрывающейся скобкой уже давно разрешена. Емнип, С99.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 09:23 6
Цитата Сообщение от soxop
"typedef void (*VECTORS)()" -- верная конструкция языка, если "VECTORS" не определен ранее (например, как какой-нибудь макрос).

Кстати, я не нашел в вашем коде использования VECTORS.
В *.c.

Цитата Сообщение от soxop
И да, надеюсь вы знаете что этот тайпдеф определяет указ. на функцию произвольного числа аргументов (а не нулевого)?
Поподробнее, плиз.

Цитата Сообщение от soxop
И да, тайпдеф как и любое другое определение действует только в пределах одного модуля. Поэтому нужно его выносить в .h и включать в тех модулях, где он требуется.
Решил. Создал typedef.h и приинклюдил в сишный файл.

Цитата Сообщение от soxop
И да, код ужасен независимо от того, кто его писал.
Чем? Поясните. Мне нужно было заменить асмовксую
Код
.equ _PROC_FSM_1 = 0

//и таблицу
Tab_FSM:
.dw PROC_FSM_1
И я это решил. В одном месте. А не в двух. Что было чревато ошибками.
Цитата Сообщение от soxop
flomdger, запятая перед закрывающейся скобкой уже давно разрешена. Емнип, С99.
Я убрал запятую, компилятор выдал ошибки.
0
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
10.04.2014, 09:52 7
Пишу с телефона, поэтому буду краток и без цитат.

1. Посмотрел еще раз. В *.с VECTORS не нашёл.

2. Если нужна функция без аргументов надо писать (void). В С++ это равносильно (), в С нет.

3. Там где вы убрали запятую убирать нельзя, ибо это разделитель. Поэтому и ошибка. А сам факт того, что вы этого не увидели говорит, что код написан в ужасном write-only стиле.
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
10.04.2014, 10:36 8
3. Там где вы убрали запятую убирать нельзя, ибо это разделитель.
Ну-ка, ну-ка?
0
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
10.04.2014, 11:40 9
Я имею в виду завершающую запятую в
#define STATE(name) name,
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
10.04.2014, 11:50 10
без запятой компилятор после препроцессора увидит:
...enum{
st_Proc_Eds_Main_Init
st_Proc_Eds_Main_Set_Manual
st_Proc_Eds_Main_Manual
st_Proc_Eds_Main_Set_Automat
...
}
без разделителей.

в .c используется какой-то VECTOR_EDS а не VECTOR.

человеку достаточной квалификации и с приличным опытом работы который на этом съел собаку и советует подобные вещи, можно лишь посоветовать перестать есть всякую гадость и писать столь плохо читаемый код.
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
10.04.2014, 12:47 11
Я имею в виду завершающую запятую в
#define STATE(name) name,
А, так вы об этом. Не видел где именно он её убирал. Перечитал C99, вы правы, запятая непричём.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 13:21 12
Цитата Сообщение от _pv
без запятой компилятор после препроцессора увидит:
...enum{
st_Proc_Eds_Main_Init
st_Proc_Eds_Main_Set_Manual
st_Proc_Eds_Main_Manual
st_Proc_Eds_Main_Set_Automat
...
}
без разделителей.

в .c используется какой-то VECTOR_EDS а не VECTOR.

человеку достаточной квалификации и с приличным опытом работы который на этом съел собаку и советует подобные вещи, можно лишь посоветовать перестать есть всякую гадость и писать столь плохо читаемый код.
Ну да, человек спросил, где VECTORS, я ответил.

Ну вы, блин, даете. Не разобралИсь а уже плюетесь. Давайте посмотрим на программирование с профессиональной точки зрения. Профессиональный, это значит, что программирование - ваша профессия, способ заработать себе на жизнь. Главный, очень важный невосполнимый ресурс - время. Здесь уже никто не считает байтики и тактики, как это делают ярые приверженцы асма. Когда это необходимо, это уже другой вопрос.
Поэтому, было (что было чревато ошибками):

Код
#define PROC_FSM_1 0
#define PROC_FSM_2 1
#define PROC_FSM_3 2
#define PROC_FSM_4 3
#define PROC_FSM_5 4

enum
{
PROC_FSM_1 = 0,
PROC_FSM_2,
PROC_FSM_3,
PROC_FSM_4,
PROC_FSM_5,
};

//таблица указателей

Proc_FSM_1
Proc_FSM_2
Proc_FSM_3
Proc_FSM_4
Proc_FSM_5
Стало:
Код
STATE (Proc_Eds_Main_Init)
STATE (Proc_Eds_Main_Set_Manual)
STATE (Proc_Eds_Main_Manual)
STATE (Proc_Eds_Main_Set_Automat)
STATE (Proc_Eds_Main_Automat)
STATE (Proc_Eds_Main_Stop)

// что превратилось в:
enum
{
st_Proc_Eds_Main_Init,
st_Proc_Eds_Main_Set_Manual,
st_Proc_Eds_Main_Manual,
st_Proc_Eds_Main_Set_Automat,
st_Proc_Eds_Main_Automat,
st_Proc_Eds_Main_Stop,
};

// таблица указателей

Proc_Eds_Main_Init,
Proc_Eds_Main_Set_Manual,
Proc_Eds_Main_Manual,
Proc_Eds_Main_Set_Automat,
Proc_Eds_Main_Automat,
Proc_Eds_Main_Stop,
И все это в одном месте, что исключило возможные ошибки. Если у вас есть лучше способ, предлагайте. Нет, нечего плеваться.
0
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
10.04.2014, 14:42 13
Товарисч, никто не плюется. Мы просто утверэдаем, что ваш код совершенно нечитабельный и, следовательно, неподдерживаем.

В последнем сообщении ваш первый кусок кода лучше чем второй, за исключением несодержательных имен.

А по теме, вы спрашивате про какой-то VECTORS, который у вас нигде не используется и тем не менее не работает. Вы удивляетесь, почему ваш код перестал работать от удаления запятой, при этом утверждаете что это проффессиональный код, который в теории должен экономить время при разработке и поддержке.

Вы можете игнорировать советы по качеству кода. Это советы. Дружеские.

И да, если быть реалистом, то простые конечные автоматы пишутся в лоб без всякой хуиты из макросов вокруг. А если автомат сложный, то легче написать утилитку, которая сама напишет код, с нужными таблицами переходов и пр. по некоторым исходным данным, которые могут легко изменяться и поддерживаться.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 17:48 14
Цитата Сообщение от soxop
Товарисч, никто не плюется. Мы просто утверэдаем, что ваш код совершенно нечитабельный и, следовательно, неподдерживаем. В последнем сообщении ваш первый кусок кода лучше чем второй, за исключением несодержательных имен.
Согласен, switch-case более читабелен. Но когда у тебя десятки состяний, все это в такую простыню превращается, что атас. Поэтому, если кол-во состояний превышает несколько, я превращаю автомат из switch-case в переход по индексу состояния. Тут уже вопрос целесообразности. Опять же, читабельность, говорите, по названиям функций уже итак понятно, как идет программа. И я не стесняюсь давать длинные названия функциям или переменным, если это только помогает быстрее разобраться в коде.

Цитата Сообщение от soxop
А по теме, вы спрашивате про какой-то VECTORS, который у вас нигде не используется и тем не менее не работает.
Бедный VECTORS. Изначально вопрос стоял: не могу использовать VECTORS в других модулях. Если я делаю определения VECTORS_TUI и VECTORS_EDS, тады работает. Что делать? Я решил этот вопрос. Этот же человек написал мне, создаем отдельный файл для typedef, typedef.h, вписываем туда VECTORS, и если нужно, инклюдим typedef.h в СИшные файлы.

Цитата Сообщение от soxop
Вы удивляетесь, почему ваш код перестал работать от удаления запятой, при этом утверждаете что это проффессиональный код, который в теории должен экономить время при разработке и поддержке.
Да едрить-мадрить! Вы читаете сообщения или по диагонали пробегаете? Это flomdger умника скорчил на запятую. Я ему уже отвечал раньше. Потом, чтобы удостовериться, убрал запятую. Компилер выдал ошибку, что и требовалось доказать.

Цитата Сообщение от soxop
Вы можете игнорировать советы по качеству кода. Это советы. Дружеские.
Я не могу игнорировать советы по культуре кода. Но и не могу пойти на поводу только лишь красивости в угоду целесообразности.

Цитата Сообщение от soxop
И да, если быть реалистом, то простые конечные автоматы пишутся в лоб без всякой хуиты из макросов вокруг. А если автомат сложный, то легче написать утилитку, которая сама напишет код, с нужными таблицами переходов и пр. по некоторым исходным данным, которые могут легко изменяться и поддерживаться.
Я сейчас очень занят. Несколько проектов. Отвечу позже.
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
10.04.2014, 18:36 15
Потом, чтобы удостовериться, убрал запятую. Компилер выдал ошибку, что и требовалось доказать.
Требовалось доказать что? Что вы не там запятую убираете? Говнокодят всякую фигню а потом удивляются: "А чо у меня не компилится?!"

Я не могу игнорировать советы по культуре кода. Но и не могу пойти на поводу только лишь красивости в угоду целесообразности.
У вас он весьма уродлив. Поддержу предыдущего оратора: первый вариант куда более читабельней. Ах да, никто не мешает вам делать ваши переходы по индексу ... и с первым вариантом.
Но это собственно ваше дело и ваш проект.

PS: По "культуре кода", длинные имена функция и переменных это тоже зло.
PS2: У вас там простыней и не пахнет.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 19:03 16
Цитата Сообщение от flomdger
Требовалось доказать что? Что вы не там запятую убираете? Говнокодят всякую фигню а потом удивляются: "А чо у меня не компилится?!".
У евреев научились стрелки переводить? Вы написали про запятую перед скобками в инклюде? Вы. Я вам ответил, потом ради эксперимента убрал запятую. И вам уже ответили, во что превращается тот макрос.
enum
{
STATE_1,
STATE_2
STATE_3,
};
Надеюсь сейчас насчет запятой разобрались?

Цитата Сообщение от flomdger
Я не могу игнорировать советы по культуре кода. Но и не могу пойти на поводу только лишь красивости в угоду целесообразности. У вас он весьма уродлив.
Чем он уродлив? Ответьте аргументированно. А пока я выскажусь. Если код непривычен, "не по канонам", то это никак не значит, что он уродлив. Не вопрос. Ваш код в студию, чтобы мы восхитились культурой вашего кода.

Цитата Сообщение от flomdger
PS: По "культуре кода", длинные имена функция и переменных это тоже зло.
Где здесь зло? Аргументы в студию. И если вы любите короткие названия, а потом вы не можете понять, что где, то вы сами себе злобный буратина. Опять же, пример вашей культуры в студию.

Цитата Сообщение от flomdger
PS2: У вас там простыней и не пахнет.
Пф-ф-ф-ф... Это лишнее...
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 19:09 17
Это еще сырой проект. Позже еще десяток-другой состояний добавится. Классическим switch-case писать? Увольте. Прописывать все ручками, потом баги ловить? Я не мазохист.

Все в одном месте. И векторы функций, и названия состояний.

Код
// *.c

__flash VECTORS proc_eds_outomat_func [PROC_EDS_AUTOMAT_STATES] =
{
#define STATE(name) name,
#include "_proc_eds_outomat.h"
#undef STATE
};

//_proc_eds_outomat.h:

//************************************************************************
//************************ Режим "Автомат" **********************************
//************************************************************************

//========================================================================
STATE (Proc_Eds_Automat_Init)
STATE (Proc_Eds_Automat_Idle)
STATE (Proc_Eds_Automat_Run)
STATE (Proc_Eds_Automat_Woyt_Sens_2)
STATE (Proc_Eds_Automat_Set_Heat_On)
STATE (Proc_Eds_Automat_Woyt_Heat_End)
STATE (Proc_Eds_Automat_Woyt_Formovka_End)
STATE (Proc_Eds_Automat_Woyt_Pnevmosyem_End)
STATE (Proc_Eds_Automat_Woyt_Sens_4)
STATE (Proc_Eds_Automat_Set_Run)
STATE (Proc_Eds_Automat_Set_Stop)
STATE (Proc_Eds_Automat_Set_Emerg_Stop)
//========================================================================

// *.c

//========================================================================
void Proc_Eds_Main_Automat (void)
{
if (_proc_eds_outomat < PROC_EDS_AUTOMAT_STATES)
{
check_keys_buf (keys_pu_buf, _proc_eds_outomat, tab_homdlers_keys_pu_outomat);

proc_eds_outomat_func [_proc_eds_outomat] ();
}
// Обработка ошибки значения состояния.
}
//========================================================================

//========================================================================
// Датчик 1 - датчик прессформа открыта.
// Датчик 2 - датчик прессформа закрыта.
// Датчик 3 - датчик подача.
// Датчик 4 - датчик подача отключена.
//========================================================================
void Proc_Eds_Automat_Init (void)
{
all_valve_off (); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

proc_eds_mode = EDS_MODE_AUTOMAT;

_proc_eds_outomat = st_Proc_Eds_Automat_Run;
}

void Proc_Eds_Automat_Idle (void)
{
}

// Смыкание прессформы. Прижимы. Нож вверх.
// Установка таймера "Таймаут датчика ПРЕССФОРМА ЗАКРЫТА".
void Proc_Eds_Automat_Run (void)
{
all_valve_off (); // Отключение всех клапанов.

// Проверка значений параметров.
// Таймер нагрева.
if (tim_heat_val == 0)
{
set_event (EV_INCORRECT_VOT_TIMER_HEAT);
_proc_eds_outomat = st_Proc_Eds_Automat_Set_Emerg_Stop;
return;
}
// Таймер формовки.
if (tim_formovka_val == 0)
{
set_event (EV_INCORRECT_VOT_TIMER_FORMOVKA);
_proc_eds_outomat = st_Proc_Eds_Automat_Set_Emerg_Stop;
return;
}

// bla-bla

//------------------------------------------------------------------------
mould_close (); // Смыкание прессформы.
prigim_on (); // Прижимы.
knife_on (); // Нож вверх.

//   set_event (EV_OUT_MODE_AUTOMAT);

set_timer (ST_PROC_EDS_T_OUT_SENS_2, DEC_NO_RERUN, 100); // Установка таймера "Таймаут датчика ПРЕССФОРМА ЗАКРЫТА".

_proc_eds_outomat = st_Proc_Eds_Automat_Woyt_Sens_2;
}
//========================================================================
// Ожидание датчика 2. Проверка таймаута датчика 2.
// Проверка таймера "Таймаут датчика 2".
void Proc_Eds_Automat_Woyt_Sens_2 (void)
{
if (woyt (ST_PROC_EDS_T_OUT_SENS_2))
{
timer_timout_sims_2++;
if (timer_timout_sims_2 >= timout_sims_2_val)
{
set_event (EV_TIMEOUT_SENS_2);
_proc_eds_outomat = st_Proc_Eds_Automat_Set_Emerg_Stop;
return;
}
set_timer (ST_PROC_EDS_T_OUT_SENS_2, DEC_NO_RERUN, 100); // Перезапуск таймера "Таймаут датчика ПРЕССФОРМА ЗАКРЫТА".
}

if (inputs_buf & (1<<KEY_MOULD))
{
_proc_eds_outomat = st_Proc_Eds_Automat_Set_Heat_On;
}
}
0
soxop
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
10.04.2014, 19:22 18
Цитата Сообщение от dymyurk1978
Где здесь зло? Аргументы в студию. И если вы любите короткие названия, а потом вы не можете понять, что где, то вы сами себе злобный буратина. Опять же, пример вашей культуры в студию.
Длина названия должна быть пропорциональна размеру области видимости. Помимо очевидного удобства это ещё стимулирует сужать области видимости где только можно, избегать глобальных переменных, сувать временные переменные внутрь блоков и другие проявления добра.

Позволю себе процитировать Линуса Т.
C is a Spartan language, omd so should your naming be. Unlike Modula-2
omd Pascal programmers, C programmers do not use cute names like
ThisVariableIsATemporaryCounter. A C programmer would call that
variable "tmp", which is much easier to write, omd not the least more
difficult to understomd.
...
GLOBAL variables (to be used only if you _really_ need them) need to
have dessriptive names, as do global functions. If you have a function
that counts the number of active usirs, you should call that
"count_active_usirs()" or symilar, you should _not_ call it "cntusr()".
Цитата Сообщение от dymyurk1978
Классическим switch-case писать? Увольте.
Можно через таблицы. В сложных случаях, как уже писал, можно автоматизировать. Но сложные конечные автоматы встречаются очень редко в практике. Серьёзно.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 19:28 19
Цитата Сообщение от soxop
Можно через таблицы. В сложных случаях, как уже писал, можно автоматизировать. Но сложные конечные автоматы встречаются очень редко в практике. Серьёзно.
Век живи, век учись, не так ли? Я уже писал, что на си не так давно переполз. Ваш пример с таблицами, плиз.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
10.04.2014, 19:41 20
Цитата Сообщение от flomdger
bla-bla
А здесь что уродливого вы нашли? Не мое. Из примера того человека.
Код
//SITUP(name, text,   def,   max,   min)
SITUP(LowBatLevel, "Low Bat Level", 0x7a, 255   , 0)

MLMESSAGE(Line, "Line  ", "Zeile ", "L nea ", "Ligne           ", "Строка")   //31
MLMESSAGE(Testing, "----Testing-----", "--Anzeigentest--"   , "-----Prueba-----", "------Test------", "Тестирование")   //10
0
10.04.2014, 19:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 19:41

Правильно решено?
Танцевальная группа состоит из 15 человек. ДЛЯ НИХ ПОСТАВЛЕНЫ ПЛАТЬЯ 4 Х ЦВЕТОВ. СКОЛЬКО...

Правильно решено?
Program V19_N4; var A,D :arrayof real; S,b,S1,S2 :real; i:integer; BEGIN write('Введите B:...

Без использования typedef все работает. При добавлении typedef — более 100 ошибок
Есть программа, с описанием структуры и функций, работающими с ней. Без использования typedef все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru