Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.01.2014, 12:46. Просмотров 262. Ответов 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-я строки похожи на прототипы функций, но у них нет определения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 12:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Распознание кода (C++):

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

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

Вынести основную часть кода кода в отдельную функцию - C++
помогите пожалуйста переделать это на функцию... #include <locale.h> #include <conio.h> int main() { setlocale(0,""); float...

Участок B кода выполняется позже, чем участок A кода, но почему-то B влияет на работоспособность A! Почему? - C++
Друзья! То есть суть такая, создаю объект и в конструктор передаю имя процесса и хэндл снимка системы. А в конструкторе начинается...

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

Библиотека ZBar Code Reader: сканирование и распознание QR-кода с вебкамеры ноутбука - C#
Здравствуйте, пишу дипломный проект , на C#, необходимо реализовать сканирование и распознание QR-кода с вебкамеры ноутбука. Что...

6
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,554
Завершенные тесты: 1
28.01.2014, 13:00 #2
Обычно заглавными буквами пишутся макросы. Попробуйте искать их в подключенных файлах.
0
Dimoks
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 6
28.01.2014, 13:57  [ТС] #3
А какое расширение должны иметь файлы макросов?
Дело в том, что в коде программы много таких констант. Может быть это просто такая форма объявления?
0
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 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 
}
п.с. я бы коечто оторвал за такой код.
0
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,554
Завершенные тесты: 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-функцию, но это уже выходит за рамки данной статьи (если дойдут руки, то напишу отдельную)
0
Dimoks
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 6
28.01.2014, 14:11  [ТС] #6
Вообще-то эти строки идут не подряд... находятся в разных файлах и функциях, все они.
0
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 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 минуту
п.с. это сместь в именновании кода с си и венгерской нотации
0
28.01.2014, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 14:19
Привет! Вот еще темы с ответами:

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

Распознание капчи - Delphi
Здравствуйте! Пытаюсь распознать капчу(примеры прикреплены). Макс. кол-во символов 4, только цифры 0-9, могут повторяться, шум есть,...

Распознание даты - PHP
есть в PHP готовые функции или классы по распознанию дат разных форматов? Чтобы к примеру вот такие даты ( 22. June 2012. | 12.02.2012 | 4...

Распознание речи на C# - C#
Перенесено из раздела "Видеокарты" Программа вроде бы написана правильно, но при компиляции выдаёт NullReferenceException и указывает на...


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

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

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