Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2015, 19:03   #1
dmvolkov
Новичок
Джуниор
 
Регистрация: 22.02.2015
Сообщений: 2
По умолчанию Передача ссылки на результат выполнения вложенной функции прямо в аргументе

Например, чтобы получить текущее время в C++ в читаемом виде можно написать следующую конструкцию:
time_t t01 = time(NULL);
struct tm * t02 = localtime(&t01);
char * t03 = asctime(t02);
Используется три типа данных, причем функция localtime работает только со ссылкой на time_t. А можно ли это же самое записать в одну строку?
То есть ясно, как это сократить до двух строк:
time_t t01 = time(NULL);
char * t03 = asctime(localtime(&t01));
Но можно ли как-то, когда нужна ссылка на результат выполнения функции, сразу же её в аргумент вписывать, что-то вроде:
char * t03 = asctime(localtime(&time(NULL)));
Естественно, &time(NULL) нельзя писать, но может есть какое-то синтаксическое правило, корректно выражающее эту мысль? Хотя бы в какую сторону гуглить про возможность/невозможность написания подобных конструкций, поскольку формулировка правильного запроса из-за дилетантизма осложняется.
dmvolkov вне форума Ответить с цитированием
Старый 25.02.2015, 20:36   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

1. Зачем?
2. Почему нельзя? Кто запретил? Пробовали вообще свой вариант скомпилить? На что ругается?
pu4koff вне форума Ответить с цитированием
Старый 25.02.2015, 22:03   #3
dmvolkov
Новичок
Джуниор
 
Регистрация: 22.02.2015
Сообщений: 2
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
1. Зачем?
2. Почему нельзя? Кто запретил? Пробовали вообще свой вариант скомпилить? На что ругается?
1. Может это и необоснованно, но ведь код из-за подобных цепочек преобразований раздувается на километры. В данном случае, чтобы получить дату в читаемом виде, мануалы time.h вообще предлагают для asctime проделать вот такое:
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
Пять строчек для элементарного вывода даты? Почему нельзя то же самое компактнее? И так ведь везде. Можно, конечно, и другие библиотеки использовать, но для начала хочется стандартными средствами обойтись.
2. Трехстрочный и двухстрочный варианты - компилируются нормально, а однострочный линуксовский gcc не признает на основании того, что "lvalue required as unary ‘&’ operand", а виндосовский Visual Studio - потому что "выражение должно быть левосторонним значением или обозначением функции". Поэтому и возник вопрос о возможности однострочной записи, без отдельного вычисления "time_t t01 = time(NULL)" с последующей на него ссылкой из localtime(). На текущем уровне собственного ликбеза кажется, что так в С++ не делают, но может это всё моё же невежество в тематике синтаксиса ссылок и указателей.
dmvolkov вне форума Ответить с цитированием
Старый 26.02.2015, 07:44   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Да. Действительно был не прав, в плюсах так низя.
Создайте инлайн функцию для этих строк, если так напрягает.
Плюсы - такие плюсы.
pu4koff вне форума Ответить с цитированием
Старый 26.02.2015, 08:02   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А причем тут плюсы, если вы рассматриваете С код и С функции?
p51x вне форума Ответить с цитированием
Старый 26.02.2015, 08:07   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В плюсах же тоже получается низя получать указатели на результат функции. Понятно, что можно переделать функции эти под такое использование и всё будет путём.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вложенной функции DKENT PHP 4 06.06.2012 06:48
Не успеваю получить результат выполнения функции в процедуре Den7656 Общие вопросы Delphi 15 12.09.2011 11:54
Результат выполнения программы g001501 Общие вопросы C/C++ 19 03.11.2010 21:16
Определить результат выполнения программы. Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2010 02:15
вызов вложенной функции veter_s_morya PHP 1 12.11.2009 11:33