Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dimoks
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 6
#1

Распознание кода - C++

28.01.2014, 12:46. Просмотров 247. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
typedef signed char aalSBool; 
const aalSBool AAL_SFALSE(-1);
long SND_SPELL_SLOW_DOWN_END(AAL_SFALSE);
SND_SPELL_SLOW_DOWN_END = aalCreateSample("magic_spell_slow_down_end.wav");
SND_SPELL_SLOW_DOWN_END = AAL_SFALSE;
В первой строке определение синонима типа, а что дальше?
2-ая и 3-я строки похожи на прототипы функций, но у них нет определения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 12:46     Распознание кода
Посмотрите здесь:

Распознание каждого элемента масива - C++
Здравствуйте. Как можно разложить массив, чтобы в дальнейшем работать с каждым элементом (нужно будет переставлять местами) #include...

Реализовать распознание объекта из некоторого множества (расширяемого) на основе вопросов и ответов - C++
Необходимо решить задачу на С++ Реализовать распознание объекта из некоторого множества (расширяемого) на основе вопросов и ответов....

Создание кода программы с нуля!! создание кода C++ - C++
ВОТ УСЛОВИЕ : Для данного вещественного x,a,b,c найти значение следующей функции f,принимающей вещественное задания: ...

Распознание - Алгоритмы
Есть несколько призвольных фигур (кривых) и одна эталонная(шаблон), все они заданы векторами. Мне нужно придумать алгоритм сравнения...

Распознание речи - C#
У меня к вам такой вопрос. Может кто разбирается с Microsoft.Speech. Заинтересовала меня тема распознания речи и я попытался понять как там...

Распознание речи - Objective-C
Собираюсь реализовать программу на iOS, которая записывает надиктованный текст на немецком языке. Раньше никогда не делал подобных вещей на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5593 / 2627 / 240
Регистрация: 01.11.2011
Сообщений: 6,461
Завершенные тесты: 1
28.01.2014, 13:00     Распознание кода #2
Обычно заглавными буквами пишутся макросы. Попробуйте искать их в подключенных файлах.
Dimoks
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 6
28.01.2014, 13:57  [ТС]     Распознание кода #3
А какое расширение должны иметь файлы макросов?
Дело в том, что в коде программы много таких констант. Может быть это просто такая форма объявления?
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
28.01.2014, 14:08     Распознание кода #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//это мы обьявляем переменную типа signed bool (signed -- не спрашивайте)
//в данном коде сделана лиш для того, чтобы добаить приставку aal 
//больше причин на это не вижу
typedef signed char aalSBool; 
 
// далее обявляем констану FALSE  типв aalSBool (signed -- не спрашивайте)
const aalSBool AAL_SFALSE(-1);
 
//маразм крепчал, теперь мы говорим что у нас есть long, но инициализируем его bool
long SND_SPELL_SLOW_DOWN_END(AAL_SFALSE);
 
//ну это мы вызавли функции и получили код возврата
SND_SPELL_SLOW_DOWN_END = aalCreateSample("magic_spell_slow_down_end.wav");
 
//маразм еще крепчает
SND_SPELL_SLOW_DOWN_END = AAL_SFALSE;
вообще это все можно просто
C++
1
2
3
4
if (aalCreateSample("magic_spell_slow_down_end.wav"))
{
// do stuff 
}
п.с. я бы коечто оторвал за такой код.
SatanaXIII
Супер-модератор
Эксперт С++
5593 / 2627 / 240
Регистрация: 01.11.2011
Сообщений: 6,461
Завершенные тесты: 1
28.01.2014, 14:10     Распознание кода #5
Именно. Если есть только вот такие подобные прототипы функций, но нет описания это два варианта - или это макросы, или файлы с описанием функций не подключены. Если этот код работает, то скорее всего первое. Кстати подключаются они точно так же, теми же файлами - с расширением .h. Обнаружить макросы в тексте программы тоже достаточно легко - большой кусок непрерывного зеленого текста должен выделяться.

Вот можете глянуть на досуге (взято отсюда):
Кликните здесь для просмотра всего текста
3.3.3. Макрос - это совсем не функция

Ещё одна распространённая ошибка демонстрируется следующим примером

C
1
2
3
4
5
6
#define SQUARE(val) val * val
void func (int x)
{
  int a;
  a = SQUARE (x+1);
}
текст программы выглядит так, как будто бы в переменную a должен записаться квадрат значения "x+1". Однако это не так. По результату работы препроцессора текст будет выглядеть следующим образом:

C
1
2
3
4
5
void func (int x)
{
  int a;
  a = x+1 * x+1;
}
и с учётом того, что приоритет операции умножения выше, чем приоритет операции сложения, то в переменную a запишется значение "x + 1*x + 1" что эквивалентно "2*x + 1", но никак не "(x+1)*(x+1)". Чтобы избежать таких проблем при написании макросов с параметрами во всех местах использования параметров их надо заключать в круглые скобки. Таким образом правильным вариантом будет следующее:

C
1
2
3
4
5
6
#define SQUARE(val) (val) * (val)
void func (int x)
{
  int a;
  a = SQUARE (x+1);
}
что после препроцессирования превратится

C
1
2
3
4
5
void func (int x)
{
  int a;
  a = (x+1) * (x+1);
}
Но это ещё не всё. Если рассмотреть немного изменённый пример

C
1
2
3
4
#define DOUBLE(val) (val) + (val)
...
  x = DOUBLE(y) * DOUBLE(y);
...
то после препроцессирования

C
1
x = (y) + (y) * (y) + (y);
опять получим неверный код. Дабы избежать этого, нужно ещё и всё тело макроса заключить в круглые скобки:


C
1
2
3
4
#define DOUBLE(val) ((val) + (val))
...
  x = DOUBLE(y) * DOUBLE(y);
...

C
1
x = ((y) + (y)) * ((y) + (y));
И если подвести краткий итог, то рекомендация будет следующая: при написании макросов, которые пишутся в качестве быстрых реализаций вместо функции, лучше всего сразу же заключить в круглые скобки все параметры и само тело макроса - меньше проблем будет в будущем

Однако даже такой вариант не сможет отработать корректно в 100% случаев. Макрос, в теле которого параметр используется более одного раза в общем случае работает некорректно (в том смысле, что отработает не так, как от него ожидали). Если в качестве параметра подать конструкцию, значение которой меняется при каждом обращении, то получим некорректный код. Например, глядя на текст

C
1
a = SQUARE (fgetc(fp));
кажется, что мы прочитаем один символ из файла и возведём его значение в квадрат, однако после препроцессирования получим следующее

C
1
a = ((fgetc(fp)) * (fgetc(fp)));
И таким образом за одно обращение к макросу будет прочитано два байта из файла и их значения будут перемножены, что опять-таки не соответствует тому, чего мы ожидали. Точно так же будет проблема, если в качестве параметра подать выражение типа "i++". О таких моментах надо всегда помнить, а потому пользоваться макросами с осторожностью. Применительно к данному примеру в языке C++ более правильным было бы реализовать inline-функцию, но это уже выходит за рамки данной статьи (если дойдут руки, то напишу отдельную)
Dimoks
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 6
28.01.2014, 14:11  [ТС]     Распознание кода #6
Вообще-то эти строки идут не подряд... находятся в разных файлах и функциях, все они.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 14:19     Распознание кода
Еще ссылки по теме:

Распознание капчи - C#
Здравствуйте, мне нужно сделать программу для распознания капчи такого вида (смотреть вложенный архив) всего 4 цифры (те что самые...

Распознание линий - Delphi
Программисты помогите мне решить такую проблему, я сделал небольшую программу по которой движется shape(машина) и передвигается по...

Распознание текста - Java SE
Есть строка 110001001010. Нужно по символьно проверит ee. И если совпадение с вариантом из map заменить на ключ. Например элемент mар ...


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

Или воспользуйтесь поиском по форуму:
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
28.01.2014, 14:19     Распознание кода #7
SatanaXIII какие макросы епт, вы о чем?)

еще раз!

//считать знаковый тип char как aal это "юзер" приставка S это сокращение signed Bool это логический тип
typedef signed char aal S Bool;

//это у нас константа потому что автор посчитал себя "умным" и знает что FALSE должен быть один в проекте.
const aalSBool AAL_SFALSE(-1);

//это МАРАЗМ
long SND_SPELL_SLOW_DOWN_END(AAL_SFALSE);

Добавлено через 1 минуту
п.с. это сместь в именновании кода с си и венгерской нотации
Yandex
Объявления
28.01.2014, 14:19     Распознание кода
Ответ Создать тему
Опции темы

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