ďťż

Ładny brzuch

W programie zadeklarowałem funkcje ( to jest deklaracja)
int sasiad(int **mapa, int size, int z) { }
Jak mam do tego przekazać tablicę zadeklarowaną wcześniej jako:
int n; cin >> n; int mapa[n][n];




Może być tak, ale to nie jest szeroko obsługiwany standard.
func(int x, int y, int tab[a][b])

Zwykle tylko rozmiar jednego wymiaru może być nieznany
func(int tab[][10])
func(int (*tab)[10])

albo przekazujesz wskaźnik i pozycję w tablicy liczysz ręcznie
func (int *t, int wierszy, int kolumn)
{
int element_x_y = *(t + (x + y * kolumn));
}


http://forum.di.com....php/t-3882.html


Jak mam do tego przekazać tablicę zadeklarowaną wcześniej jako:
int mapa[n][n];

dodam od siebie że jest to niepoprawna konstrukcja - tak wiem w GCC działa ale jest to jego rozszerzenie


dodam od siebie że jest to niepoprawna konstrukcja - tak wiem w GCC działa ale jest to jego rozszerzenie
sam sobie przeczysz :P w gcc dziala, wiec jest poprawna. swoja droga to nigdy nie wiem, czy ta instrukcja niejawnie zamieniana jest na new i na koniec scope'a delete, czy jakos inaczej jest tworzona?




sam sobie przeczysz :P w gcc dziala, wiec jest poprawna. swoja droga to nigdy nie wiem, czy ta instrukcja niejawnie zamieniana jest na new i na koniec scope'a delete, czy jakos inaczej jest tworzona?
Nie bluznij, takie cos posiada jedynie C99, a jako, ze nie ograznicza to w zaden sposob C++ to w GCC na to pozwala ale nie jest to czescia C++ i nie mow, ze jak cos dziala na konkretnym kompilatorze na konkretnej platformie to jest to poprawne.

std::vector::operator[] tez w VC++ sypnie asertem ale nie znaczy to, ze jest to w standardzie i poleganie na tym jest bledem.


Nie bluznij, takie cos posiada jedynie C99, a jako, ze nie ograznicza to w zaden sposob C++ to w GCC na to pozwala ale nie jest to czescia C++ i

std::vector::operator[] tez w VC++ sypnie asertem ale nie znaczy to, ze jest to w standardzie i poleganie na tym jest bledem.

lol, to ze cos nie jest zgodne ze standardem, nie znaczy ze jest niepoprawne. akurat c/c++ jest jezykiem w ktorym baardzo wiele szczegolow rozni sie w zaleznosci od implementacji, i malo ktory kompilator calkowicie zgadza sie ze standardami. a juz korzystanie z rozszerzen, a nie modyfikacji jezyka w ogole nie moze nazwane byc bledem

nie mow, ze jak cos dziala na konkretnym kompilatorze na konkretnej platformie to jest to poprawne.
dokladnie, jak cos dziala na konkretnym kompilatorze to nie jest bledem. to, ze nie wchodzi w sklad standardu to zupelnie inne pojecie. wg twojego rozumowania dodatkowe mozliwosci kompilatorow nie maja sensu, bo sa "bledem". to akurat jest specyficzne rozszerzenie, ale wciaz - uzywanie go na gcc bledem nie jest, uzywanie go w innych kompilatorach, czy wg standardow oczywiscie jest.
Użytkownik Deadeye edytował ten post 04 październik 2007, 17:53

lol, to ze cos nie jest zgodne ze standardem, nie znaczy ze jest niepoprawne [...]

no tak, slownikowo nie znaczy, dwa rozne slowo. Wydaje mi sie, ze nie masz pojecia czemu służą standardy. Uzywanie czegos, co obsluguje tylko jeden kompilator jest bardzo ale to bardzo zlym nawykiem. Swojego czasu VC++ był przesladowany, bo "jego C++" odbiegał od standardu.


akurat c/c++ jest jezykiem w ktorym baardzo wiele szczegolow rozni sie w zaleznosci od implementacji Wiele? Wymien chociaz 10.


i malo ktory kompilator calkowicie zgadza sie ze standardami
chyba zaden w 100% ;]


ale wciaz - uzywanie go na gcc bledem nie jest
dokladnie, bledem, w sensie wyplucia go przez kompilator nie jest. ;] A skompiluj sobie takowy przyklad ze switchem -pedantic

"Ktury" tez nie jest bledem? Przeciesz dziala - wszyscy kumaja o co chodzi. W C++ nie ma "variable-size array" i tyle a pisanie w C++ czegos co nie jest C++ nazywaj sobie jak chcesz. Java to tez C++, tylko troche przerobiona - pare rzeczy dodali, pare usuneli, nie?

BTW, w zasadzie to Borland zrobil jednym z pierwszych kompilatorow ktore sa w 100% zgodne, w kazdym razie posiada mozliwosc oddzielenia deklaracji od implementacji w szablonach co jest chyba jedyna rzecza z sa dzisiaj problemy :) Ale generalnie C++ to masakra, nawet Cfront Stroustrupa wymiekl (i to juz na wyjatkach :P)
Użytkownik WolverinePL edytował ten post 04 październik 2007, 18:53

"Ktury" tez nie jest bledem? Przeciesz dziala - wszyscy kumaja o co chodzi.
wy robicie tej samej klasy blad, tylko nie w pisaniu, a w czytaniu - nie odrozniacie slow "blad" od "niezgodny ze standardami", "niezalecany", "nieprofesjonalny" itd.


Wydaje mi sie, ze nie masz pojecia czemu służą standardy. Uzywanie czegos, co obsluguje tylko jeden kompilator jest bardzo ale to bardzo zlym nawykiem. Swojego czasu VC++ był przesladowany, bo "jego C++" odbiegał od standardu. gdzie ja napisalem ze nie stosowanie standardow to dobry pomysl? patrz wyzej.


W C++ nie ma "variable-size array" i tyle a pisanie w C++ czegos co nie jest C++ nazywaj sobie jak chcesz.
c/c++ to otwarty jezyk, do czego przyczynili sie sami tworcy (pierwsza specyfikacja jezyka byla bardzo ogolna i nie ustalala wielu rzeczy, dajac tworcom kompilatorow wolna reke). pozniej autorzy dodali swoja wlasna, pelna specyfikacje, ale nie jest ona jedynie poprawna - kazdy tworca kompilatora tworzy wlasne zasady, i, jakiekolwiek by one nie byly, sa zgodne w sferze wlasnie tego kompilatora, a wiec nie sa bledem. to, ze nie sa zgodne ze standardami, to inna sprawa ;]

Nawiązała się ciekawa dyskusja. Mam pytanie - czy wg Ciebie to że np. IE odstaje od standardów wyznaczanych przez w3 i przez to strony tworzone strikto pod IE są źle wyświetlane na innych przeglądarkach, powoduje że ta strona jest błędna czy nie? Bo imo taka strona jest błędna dla tego, że na innych przeglądarkach źle się wyświetla. Ale jakiś zakochany w IE człek powie że jest ok, bo działa pod IE poprawnie.
I tak samo wg mnie jest z kompilatorami. Jeżeli coś nazywa się kompilatorem C++ to wg mnie powinno trzymać się standardów. Tak samo było przecież z delphi - język został zapewne przemianowany na delphi z OP dla tego, że zaczął od niego odbiegać.
Także imo błędem jest korzystanie z dodatków jakiegoś kompilatora jeżeli tworzymy kod w C++. Jeżeli natomiast tworzymy program w C++ pod kompilator X to można wg mnie można korzystać z dodatków. Ale nie nazwę wtedy tego programem profesjonalnym ;).
Użytkownik Ali240 edytował ten post 04 październik 2007, 21:05

Nawiązała się ciekawa dyskusja. Mam pytanie - czy wg Ciebie to że np. IE odstaje od standardów wyznaczanych przez w3 i przez to strony tworzone strikto pod IE są źle wyświetlane na innych przeglądarkach, powoduje że ta strona jest błędna czy nie? Bo imo taka strona jest błędna dla tego, że na innych przeglądarkach źle się wyświetla. Ale jakiś zakochany w IE człek powie że jest ok, bo działa pod IE poprawnie.
tu roznica jest taka, ze strony z definicji sa otwierane pod roznymi przegladarkami, a kod jest z definicji kompilowany jednym kompilatorem (wyjatek to moze open source, ale tutaj zazwyczaj tez sie podaje jakiego kompilatora uzywal autor, albo sa ustalone standardy). pisanie przenosnego kodu to mozliwosc, nie obowiazek. znowu trzeba dodac ze raczej zalecana mozliwosc, ale...

Tak samo było przecież z delphi - język został zapewne przemianowany na delphi z OP dla tego, że zaczął od niego odbiegać. to raczej z celow marketingowych. o delphi slyszal kazdy programista, o op nie.

Także imo błędem jest korzystanie z dodatków jakiegoś kompilatora jeżeli tworzymy kod w C++.
jesli tworzymy wg ogolnych standardow, to nie jest bledem, tylko calkowita dyskfalifikacja ;) bo kod sie nawet nie skompiluje w wiekszosci kompilatorow.

Jeżeli natomiast tworzymy program w C++ pod kompilator X to można wg mnie można korzystać z dodatków. Ale nie nazwę wtedy tego programem profesjonalnym ;) .

o to mi wlasnie chodzi :)


tu roznica jest taka, ze strony z definicji sa otwierane pod roznymi przegladarkami, a kod jest z definicji kompilowany jednym kompilatorem
Yyy, a skad ta definicja?

Temat jest o C++, ktory MA swoj standard, C++ TO JEST standard, wiec konstrukcja "void foo(int n) { int a[n]; }" NIE JEST poprawna w C++ (moze i jest w GNU C++ ale nie w C++), tak samo jak "void main()" czy "int main()" w ANSI C.

C++ (co znaczy to samo co ISO C++) pozwala aby NIEKTORE rzeczy mogly sie roznic w implementacjach ale sa to glownie (a moze nawet tylko, nie wiem) roznice w postaci binarnej (name mangling czy obsluga wyjatkow) ale wprowadzanie takich rzeczy jak "variadic array" czy pozwalanie na to zeby funkcja main() zwracala co innego niz int do nich nie nalezy.

Deadeye, slowo "blad" to abstrakcja (zwlaszcza w Informatyce) i zaloze sie, ze w tym watku doskonale rozumiesz jego uzycie a jednak udowadniasz swoje racje.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •