Portál AbcLinuxu, 9. května 2025 20:45

Dotaz: gcc a default argument

22.6.2005 19:26 psYcOder | skóre: 5
gcc a default argument
Přečteno: 72×
Odpovědět | Admin
Zdravim, potykam se opet s problemem kompatibility kodu psaneho pro starsi verzi gcc, pri kompilaci na novejsi gcc(3.2.3). Kod je vesmes kompatibilni s novejsi gcc 3.2.3,az na to,ze se zda,ze ve verzi 3.2.3 asi nepodporuje defaultni predavani argumentu... int f(int a,int = 0).

Muj dotaz je,zda neexistuje nejaky parametr pro tento kompilator,aby s tim pocital. Tech funkci je tam docela dost. Radeji bych to resil timhle zpusobem,nez vse opravoval v kodu.

Dekuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.6.2005 20:12 johniez | skóre: 17 | blog: xyz | Praha
Rozbalit Rozbalit vše Re: gcc a default argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
a nemelo by bejt int f(int a, int b=0)?
22.6.2005 20:54 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: gcc a default argument
Ne v deklaraci stačí typ -- a v definici pro změnu nemá implicitní hodnota co dělat. Normálně to funguje v gcc 3.4 i 4.0, které zrušily řadu rozšíření. Samozřejmě v C++; v C implicitní parametry nejsou. Mělo-li je někdy gcc jako rozšíření (nevím o tom), tak je to holt smůla, protože už nemá a musí se to napsat bez nich.
22.6.2005 20:58 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: gcc a default argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pošli kód, co ti nefunguje, protože tohle normálně funguje
$ cat implicit.cc 
#include <iostream>

int f(int a, int = 2, int c = 3);

int f(int a, int b, int c)
{
  std::cout << a << " " << b << " " << c << std::endl;
  return 0;
}

int main(void)
{
  f(1);
  f(2, 3);
  f(3, 4, 5);
}
$ g++32 -Wall implicit.cc ; ./a.out
1 2 3
2 3 3
3 4 5
$ g++32 --version
g++32 (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-47.fc4)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ 
23.6.2005 23:46 psYcOder | skóre: 5
Rozbalit Rozbalit vše Re: gcc a default argument
1. musim reagovat na spravny postreh,ze tam melo byt jako druhy argument b = 0,ale principialne jde temer o stejnou vec. 2.Cast kodu na ktere to napr. nejde...:

.h Inti::Gtk::Widget *Lookup(const char *aName, const char *cLayoutName = NULL);

.cc Inti::Gtk::Widget *CClientPageLoader::Lookup(const char *aName, const char *cLayoutName = NULL)

Ale uz jsem na to prisel...defaultni parametr nesmi byt uveden v .cc implementaci. Pouze v deklaraci.

Dekuji.
elviin avatar 22.6.2005 23:44 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
Rozbalit Rozbalit vše Re: gcc a default argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
#include <iostream>

void f1( int, ... )
{
   std::cout << "f( int, ... )\n";

}

void f2( int, int  = 0 )
{
   std::cout << "f( int, 0 )\n";

}

int main()
{
   f1( 1 );
   f2( 1, 2 );
   return 0; 
}
Pokud se budou jmenovat stejne, napr. "f":
elviin@nilix>g++ test.cpp                                                                    </tmp
test.cpp: In function `int main()':
test.cpp:17: error: call of overloaded `f(int)' is ambiguous
test.cpp:4: error: candidates are: void f(int, ...)
test.cpp:10: error:                 void f(int, int)
... ale to je jina kapitola.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.