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

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

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

Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
...
Рейтинг: 0 / 0
Порядок вычисления параметров функции
    #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
Порядок вычисления параметров функции
    #34539365
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
Но ведь функция printf() работает нормально, мне тоже так хочется
...
Рейтинг: 0 / 0
Порядок вычисления параметров функции
    #34539397
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner Akh
Использование взаимо-зависимых изменяемых аргументов функции не являетс гуд.
Но ведь функция printf() работает нормально, мне тоже так хочется

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

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

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

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

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

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


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