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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.83
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
#1

Как перенести параметры из ф-ции printf() в самодельную - C++

04.06.2011, 09:22. Просмотров 10883. Ответов 103
Метки нет (Все метки)

Ребят, подскажите как решить задачу.
Нужно перенести параметры функции printf() в самодельную ф-цию myfunk(). При условии если булева переменная Х==1. Если не равна 1, то не переносить.
Задача осложняется тем, что число параметров ф-ции может быть переменным.
Подскажите пожалуйста, буду очень признателен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как перенести параметры из ф-ции printf() в самодельную (C++):

Передача ф-ции как параметра другой ф-ции - C++
struct pupil{ char surname; int school; int answer; int num; } tmp, a; int usl(int i, pupil a) { }

Параметры printf - C++
Здравствуйте дорогие форумчане ;) У меня есть вопрос по следующему куску кода. Решив по практиковаться с консольным приложением у меня...

Динамические параметры printf() - C++
Есть код printf("%5s <-- %14s\n", buffer0.c_str(), "n/a"); Что делать если я не знаю на этапе компиляции числа 5 и 14? Для...

Чем ::printf предпочтительнее printf? - C++
Смотрю на код одного толкового программиста и, как новичек в С++, удивляюсь: какой смысл писать в таком стиле? Это же вроде одно и то же....

Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? - C++
Написал код в котором надо вводить каждый елемент(первое число, знак операции, второе число, знак операции, 3... знак "=") по отдельности....

Как перенести параметры с XP на 7 - Windows
Не знаю в какой ветке разместить тему, то ли в XP, то ли в 7... Всё началось с того, что установив win7, я не смог установить драйвер на...

103
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
05.06.2011, 16:06 #76
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Хотя навскидку - только преобразования типов указателей претендуют на специфику архитектуры. Остальное - вполне стандартный С++...
Нет. То, что параметры передаются таким образом на стеке на intel'е - это не значит, что они передаются таким же образом на других архитектурах. Если параметры типа int на i386 будут передаваться в стеке с интервалом в 4 байта, но на 64-битных архитектурах даже если они и передаются на стеке, то будут скорее всего передаваться с интервалом 8 байт. параметры структурных типов так вообще где как передаются. На многих архитектурах часть параметров передаётся на регистрах. Чтобы все эти тонкости не знать, для того и придумали интерфейсы va_start, va_srg, va_end - на каждой платформе они реализованы таким образом, чтобы учитывать специфику "родного" ABI

Добавлено через 2 минуты
Цитата Сообщение от Uklunok Посмотреть сообщение
Как господин Nameless One, сказал сделать, вроде должно работать, ведь проверяться будет на железе
Не очень понял, что ты хотел сказать, но тебе придётся реализовывать свою собственную printf и от этого скорее всего никуда не денешься

Цитата Сообщение от Nameless One Посмотреть сообщение
ну ТС'у код нужно написать под определенный контроллер, так что, думаю, это не проблема
Ну я и имел в виду, что %p - это не есть что-то новое, а просто нужным образом заиспользовать то, что уже реализовано
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 16:11  [ТС] #77
Цитата Сообщение от Evg Посмотреть сообщение

Не очень понял, что ты хотел сказать, но тебе придётся реализовывать свою собственную printf и от этого скорее всего никуда не денешься
Зачем реализовывать свою ф-цию? Если и так работает нормально, 7 параметров это не плохо, хотя их на самом деле 10 для компилятора МК FTDI. Я ведь не для себя, мне для отчётности надо. Если то что есть будет работать на железе, то великолепно. А так как компилятор нормально скомпилировал и собрал, то думаю должно работать)
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 16:15 #78
Цитата Сообщение от Uklunok Посмотреть сообщение
А так как компилятор нормально скомпилировал и собрал, то думаю должно работать)
К сожалению, то, что программа на С/С++ скомпилировалась - не является достаточной гарантией того, что он работает. Напиши тесты и проверь. Тогда будешь полностью уверен.
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 17:05  [ТС] #79
Ну дак я ведь ещё и в билдере проверил. Перенёс код, скомпилировал и работает. Правда компилятор для ftdi выдал 4 warning-a, ну это не беда думаю...

Добавлено через 56 секунд
А что за тесты?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 17:07 #80
Uklunok, программа, которая будет вызывать твою функцию (работоспособность которой нужно проверить) с различными аргументами, чтобы выяснить, правильно ли работает эта функция.
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
05.06.2011, 17:12 #81
Цитата Сообщение от Uklunok Посмотреть сообщение
Если и так работает нормально
Если работает - хорошо. Правда я в этой теме так и не увидел рабочего кода
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 17:17  [ТС] #82
Он по ссылке, в посте номер 42
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
05.06.2011, 17:31 #83
Цитата Сообщение от Uklunok Посмотреть сообщение
Он по ссылке, в посте номер 42
Так это и есть собственная реализация printf'а. "Собственная" - это не значит, что лично ты её написал, это означает "не стандартная, не библиотечная"

Добавлено через 2 минуты
При этом надо понимать, что там описана весьма корявая непереносимая реализация, которая страдает тем же дефектом, что и примеры без va_arg из статьи ValeryLaptev
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 17:39  [ТС] #84
А есть открытая библиотечная?
И что значит не переносимая?
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
05.06.2011, 17:50 #85
Цитата Сообщение от Uklunok Посмотреть сообщение
А есть открытая библиотечная?
glibc

Цитата Сообщение от Uklunok Посмотреть сообщение
И что значит не переносимая?
На других платформах работать не будет

Добавлено через 1 минуту
Хотя наверно я не туда залез. Надо смотреть версию "WITH stdarg.h"
http://www.menie.org/georges/embedde...tf-stdarg.html
Это по крайней мере переносимым образом написана, но всё равно с ошибками
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
06.06.2011, 12:01  [ТС] #86
Цитата Сообщение от Evg Посмотреть сообщение
http://www.menie.org/georges/embedde...tf-stdarg.html
Это по крайней мере переносимым образом написана, но всё равно с ошибками
Ну это она и есть. - которую я взял.

Ребят, не подскажите тут в строке замечание:
C
1
2
3
4
 for ( ; *string ; ++string) {
        [U][I] printchar (out, *string); [/I][/U] - тут!
        ++pc;
    }
Говорит следующее: [VinC.exe] : src\Runtime.c line 74: (warning) C1408 parameter number 2 type mismatch

Описание из справки:
Warning Description: parameter mismatch in redeclaration
A mismatch occurred between the parameters in a function's declaration or prototype and the parameters passed to a function in a call. May also occur when a mismatch in the count of the parameters occurs in a redeclaration.
Как убрать такое?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
06.06.2011, 12:05 #87
Uklunok, out - указатель на указатель?
*string - имеет тип char, а не int?
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
06.06.2011, 12:25  [ТС] #88
C
1
static int prints(char **out, const char *string, int width, int pad)
Всё верно: out - указатель на указатель, string - char

И как быть? Никак?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
06.06.2011, 15:28 #89
Uklunok, Можно в int преобразовать *string)
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
08.06.2011, 11:04  [ТС] #90
Ребята, кто знает? Скажите, почему следующий код не выводит строковый параметр:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
 
int DEBUG=1;
int my_printf(const char *fmt, ...)
{
    if(DEBUG == 0) return printf ("DEBUG = 0\n");
    else
    {
        va_list args;
        va_start(args, fmt);
    return printf(fmt,args);
    }
}
void main(void)
{
my_printf("String %s and %s\n", "here", "here!");
system("pause");
}
В результате выводится на экран: String @ and @
Там где @ - абракадабра), хочу "String here and here!"

Как быть? подскажите пожалуйста

Добавлено через 17 минут
Я лучше перефразирую свой вопрос:
Можно сделать так чтобы приведённый ниже код работал без макросов???:

C
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
#include <stdio.h>
#include <stdarg.h>
 
void my_printf(const char *format, ...) {
        va_list args;
 
 
        va_start(args, format);
        printf(format, args);
        va_end(args);
 
/* если убрать эту строку, то будет использоваться
 * библиотечный стандартный printf
*/
//#define USE_MY_PRINTF
 
 
#if defined USE_MY_PRINTF
#define projectname_print my_printf
#else
#define projectname_print printf
#endif
 
int main() {
        projectname_print("%d.%d %s", 10, 15, "TEST\n");
system("pause");
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2011, 11:04
Привет! Вот еще темы с ответами:

Не могу понять как исправить ошибку Warning: printf() [function.printf]: Too few arguments in Z:\home\ksards.ru\www\id\1.php on line 76 - PHP БД
Помогите связать бд с сайтом я новичок в этом вот код php &lt;?php do { printf(&quot;&lt;div class='blog'&gt;&lt;a href='2.php?id=%s'&gt;%s&lt;/a&gt;...

Узнать в ф-ции имя вызвавшей ф-ции - Python
Это возможно? Т.е. есть некая ф-ция debug(msg), передавать имя вызвавшей ее процедуры в параметрах не вариант, можно ли как-то внутри это...

DLL - как подменить функцию, используя самодельную DLL? - C++ Builder
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа (только exe), которая при определенном...

Перетаскивание формы за самодельную рамку - C#
Всем привет. Подскажите, убрал стандартную рамку у программы (FormBorderStyle = None) и сделал свою рамку из picturebox. Теперь я делаю...


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

Или воспользуйтесь поиском по форуму:
90
Yandex
Объявления
08.06.2011, 11:04
Ответ Создать тему
Опции темы

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