stdarg

33 отговора 834 прегледа
в отговор на some #21

Re: Ееххх, аман от акалии

pi4, bez da se obijdash - ama s copy/paste ot man stranicite programist ne se stava
ideiata e :
switch/case 's' se izpolzva, kogato imash neizvesten broj i neizvestni tipove na argumentite, zatova imash i formaten string - *fmt. Naj-verojatno ti vuobshte ne podavash takyv string (v tvoja slu4aj toj triabva da e "sssss", ili neshto podobno)

shtom ti e izvestno 4e argumentite sa samo stringove (ako pravilno sym razbral), to vmesto char *fmt, moje da podavash tehnia broj. naprimer:

void foo(int num,...);

foo(2,"s1,"s2");
foo(1,"string");
foo(4,"aa","bb","cc","dd");

Отговор
в отговор на arg #22

Ти пак не си прочел какво съм написал по горе

Абе защо не четеш какво пиша, а само си нареждаш твойта "ПИЧ".
Сега да ти го кажа пак отчасти:
варианта който използвам в момента е без case/switch и си предавам като аргумент броя на низовете (както съм написал по горе) - но така се губи наполовина смисъла от променливия брой аргументи.

Както и да е, вече разбрах къде е проблема ;)

Отговор
в отговор на zaphod #23

Стана ми ясно...

Въпреки че в един момент не получавах адекватни отговори (което честно казано доста ме ядоса), вашите отговори ме подведоха до съществото на проблема - форматиращия низ. За това нещо, признавам си, не бях разбрал точно какво трябва да се направи

Отговор
в отговор на some #24

Re: Ти пак не си прочел какво съм написал по горе

a, zna4i naj-nakraja si uspial da proumeesh 4e problema ne e v switch/case, a v formatirashta string - neshto, koeto se opitah da ti obesnia oshte s pyrvia si posting :)

drugoto, koeto ne ti e jasno e kak se predavat argumenti kym funcii v C, a imenno kak raboti steck-a :) , i zashto e neobhodimo da podavash i broja na argumentite

hint: ima na4in i da ne podavsh broja na argumentite, no za da proumeesh kak, purvo triabva da razberesh kak raboti stecka :)

Отговор
в отговор на some #25

Re: Стана ми ясно...

Имаш предвид, че не си подавал "sssss..."? Е, окей...

Иначе това си е ограничение в езика - само със средствата на <stdarg.h> (или на <varargs.h>) не можеш да установиш броя на параметрите. Трябва да го предадеш по някакъв начин с помощта на фиксираните параметри. Затова и в <stdarg.h> го има ограничението, че функцията трябва да приема поне един фиксиран параметър.

Peace.

Отговор
в отговор на arg #26

Re: Ти пак не си прочел какво съм написал по горе

Не съм се тупал по гърдите че разбирам много, така че всяка помощ/съвет са ми добре дошли :)
Извинявай "arg" ако съм реагирал малко остро в някои моменти. Днес сутринта след като препрочетох всичко отново на "свежа" глава установих че като че ли, аз съм бил по припрян в отговорите си - за което пак се извинявам.

Отговор
в отговор на Pesho® #27

Re: Стана ми ясно...

За съжаление, явно е така...
Тази дискусия бе доста полезна за мене (малко ми промени гледната точка). Предполагам че отговора (въпроса) който съм очаквал да получа още в началото е: "А какъв ти е форматиращия стринг?".



Отговор
в отговор на Pesho® #28

e ne e taka :)

ima pone edin fiksiran za da ima ot kyda da pochnesh s va_start
a kolko sa argumentite triabwa sam da precenish
moje niakak da go zadawash w niakoi ot fiks. argumenti
a moje i da ne go zadawash wyobshte, w chastnost moje
poslednia argument da ima naiakakwa stoinost koiato da
signalizira che niama poweche nishto
primrno foo( bar, "ala", "bala", "tralala", 0 );

da ne goworim che ako si "otworen" moje i da ne gi polzwash tia
makrosi va_.... ama triabwa da si naiasno koe
kydee w stack-a kato wikash funkcia, da se syobraziawash s
alignmenti i t.n. aide da ne se otwariam :)

Отговор
в отговор на ocde #29

давай де :)

Отвори се ! Кажи как става - поне на мен ще ми е интересно

Отговор
в отговор на ocde #30

Re: e ne e taka :)

moje i da niamash fiksiran argument, no triabva da haknesh va_start macrosa da zapo4va ot purvia argument ot steka. tva ne e tokoz trudno
originalnia macros e:

#define va_start(ap, parmN) ((ap)[0] = (char *) &(parmN) + \
((sizeof(parmN) + sizeof(int) - 1) & ~(sizeof(int) - 1)), (void) 0)

Отговор
в отговор на some #31

Аман от по-големи акЪлии

Явно който те е предупредил, че няма да получиш адекватно мнение те е знаел как си задаваш въпросите. Така говорят жените - куп информация, която само те си знаят, но на базата на нея очакват адекватен отговор. Затова и ги затруднява програмирането.
Преди да се оплачеш от отговора помисли какво си попитал.


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на Colombino #32

Re: Аман.... И една идея.

Няма проблеми - критикувай. Щом като знаеш как говорят жените.... Аз скоро ще се женя, та сигурно също ще разбера.
Както и да е, ядосването ми беше вчера (до някъде имах право - не отричай).
Сега след като си направи кефа да ме "благословиш" поне кажи нещо конструктивно по темата - иначе "обаждането" ти е абсолютно безмислено.

А идеята ми, е да напиша някакво 20-30 реда HOWTO за използването на stdarg. Надявам се нямате нищо против да използвам инфото от тази тема? По точно питам хората които наистина помогнаха и въпреки раздразненоста ми, ми отговориха.
Надявам се да няма повече мнения като горното ;)

Отговор
в отговор на some #33

Re: Аман.... И една идея.

olele ;)
za kogo e prednaznacheno towa howto :))

Отговор
в отговор на code #34

Re: Аман.... И една идея.

За такива като мене ;)

Отговор