Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порядок вычисления параметров функции / 13 сообщений из 13, страница 1 из 1
21.05.2007, 10:57
    #34538969
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
Уважаемые знатоки, у меня такая проблема: Имеется моя функция с произвольным числом параметров, в моем случае функция выводит строки на экран которые указываются в параметрах, вывод строк должен осуществляться в том же порядке в каком они стоят в параметрах, но если вместо строк стоят выражения то вычисление параметров происходит в обратном порядке и при выводе получается каша. Как этого избежать? Могу весь код показать если нужно (он маленький).
...
Рейтинг: 0 / 0
21.05.2007, 10:58
    #34538973
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
будет понятней, если покажите.

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
21.05.2007, 11:03
    #34538989
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginnerУважаемые знатоки, у меня такая проблема: Имеется моя функция с произвольным числом параметров, в моем случае функция выводит строки на экран которые указываются в параметрах, вывод строк должен осуществляться в том же порядке в каком они стоят в параметрах, но если вместо строк стоят выражения то вычисление параметров происходит в обратном порядке и при выводе получается каша. Как этого избежать? Могу весь код показать если нужно (он маленький).

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

Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
...
Рейтинг: 0 / 0
21.05.2007, 13:05
    #34539357
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
Вот текст программы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
#include "NRMGET6.h"
/*
здесь моя функция: NrmGetNumeralsString(double theNum, short precision=2)
Возвращает строку в которой текстовое значение числа theNum
*/

#include "NRMOUT1.h"
/*
здесь моя функция вывода текста на экран посредством функции ДОС 09h
через 21h прерывание void nrmo(char *szfirst,char *sznext=0, ...)
суть функции в том чтобы указывать числовой ноль в последнем параметре если
параметров больше одного, тем самым указывается конец всех параметров
*/
#include <stdio.h>
#include <stdlib.h>

int nMain= 0 ;  // это будет щетчик вызовов функции f1, который она же и будет увеличивать
int f1(int,int,int&);

void main(void)
{
	char *sz1[ 3 ];

	//this code make abnormal results
	nrmo(
		NrmGetNumeralsString(f1( 0 , 0 ,nMain)),
		"\r\n",
		NrmGetNumeralsString(f1( 1 , 25 ,nMain)),
		"\r\n",
		NrmGetNumeralsString(f1( 0 , 0 ,nMain)),
		"\r\n",
		NrmGetNumeralsString(f1( 1 , 8 ,nMain)),
		"\r\n",
		 0 
	);

	/*
	//в этом вызове последовательность нормальная
	nrmo(
		NrmGetNumeralsString(1),
		"\r\n",
		NrmGetNumeralsString(2),
		"\r\n",
		NrmGetNumeralsString(3),
		"\r\n",
		NrmGetNumeralsString(4),
		"\r\n",
		0
	);
	*/
};

/*
Эта функция копирует значение nValue в статическую
переменную nReturner при условии что nInputed != 0
(не спрашивайте зачем :), но благодаря этому мы увидим
разность вызовов) и сама выводит значения всех ее данных.
Еще она увеличивает принятый в параметрах щетчик nCount&
И из этого мы можем увидеть какой по счету параметр переданный
функции nrmo когда вычисляется
*/
int f1(int nInputed, int nValue, int& nCount)
{

	static int nReturner;

	if (nInputed) {
		nReturner=nValue;
	};
	nCount++;
	printf("%i\n\r",nInputed);
	printf("%i\n\r",nValue);
	printf("%i\n\n\r",nCount);
	printf("%i\n\n\n\n\r",nReturner);
	return nReturner;

};

Еще я положил архив с исходником, но без этих комментариев
...
Рейтинг: 0 / 0
21.05.2007, 13:07
    #34539365
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
Akh
Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
Но ведь функция printf() работает нормально, мне тоже так хочется
...
Рейтинг: 0 / 0
21.05.2007, 13:16
    #34539397
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginner Akh
Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
Но ведь функция printf() работает нормально, мне тоже так хочется

Что значит работает нормально? ты пробовал вместо nrmo подставить printf?
...
Рейтинг: 0 / 0
21.05.2007, 14:17
    #34539648
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
Akh
Что значит работает нормально? ты пробовал вместо nrmo подставить printf?
Блиииинн!!!!! Ну не че себе, проверил, а как же так? Как же тогда угадать в каком порядке она будет их вычислять?
...
Рейтинг: 0 / 0
21.05.2007, 14:25
    #34539674
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginner пишет:

> Уважаемые знатоки, у меня такая проблема: Имеется моя функция с
> произвольным числом параметров, в моем случае функция выводит строки на

Порядок вычисления параметров вызова функции не определен.
Если вы на это закладываетесь, то у вас имеет место быть UB.
Чтобы избежать этого, вычислите все параметры ДО вызова функции.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.05.2007, 14:33
    #34539706
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
MasterZiv
Если вы на это закладываетесь, то у вас имеет место быть UB.

Извините, а что такое UB?
...
Рейтинг: 0 / 0
21.05.2007, 14:57
    #34539795
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginnerИзвините, а что такое UB?это то, про что воевали в соседнем топике про много плюсов :)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.05.2007, 15:06
    #34539832
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginner Akh
Что значит работает нормально? ты пробовал вместо nrmo подставить printf?
Блиииинн!!!!! Ну не че себе, проверил, а как же так? Как же тогда угадать в каком порядке она будет их вычислять?

Не использовать как не гуд. Что такое не гуд смотреть сюда.
...
Рейтинг: 0 / 0
21.05.2007, 15:32
    #34539913
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
nrmBeginner пишет:
> Если вы на это закладываетесь, то у вас имеет место быть UB.

Это страшное слово Undefined Behavior !
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.05.2007, 16:44
    #34540172
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок вычисления параметров функции
Блин, я прозрел. А как всетаки реальность жестока
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порядок вычисления параметров функции / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]