kolejne ciekawostki z placu boju
Warte odnotowania na przyszłość, gdy po raz n-ty będę się zastanawiał dlaczego coś tak oczywistego nie działa:
int main(int argc, char *argv[])
{
if(argv[1] == "dupa")
cout << "yes yes yes" << endl;
return 0;
}
natomiast już takie coś działa jak najbardziej:
int main(int argc, char *argv[])
{
if(string(argv[1]) == "dupa")
cout << "yes yes yes" << endl;
return 0;
}
Czyż ten język nie jest piękny...
Komentarze do notki 'kolejne ciekawostki z placu boju'
Dodaj komentarz:
Zastrzegam sobie prawo do usuwania komentarzy nie odnoszących się do treści wpisu.
tak – wskaźniki są piękne :)
z uwielbienia do wskaźników programuję w php & javie ;)
(chociaż na pewno coś tracę...)
3 listopada 2006 00:05:51endl… Wy nie macie jak już bardziej zaśmiecać kodu? \n jest aż tak trudne w użyciu?
A zamiast stringować argv, i porównywać zestringowane, lepiej jest użyć strcmp().
Tylko po co programista C++ by miał coś robić prościej? Przecież robienie wszystko naobkoło jest fajniejsze, bo nic nie trzeba umieć.
3 listopada 2006 06:20:47@Michał Górny – a czemu lepiej jest użyć strcmp? I czemu jest lepiej używać \n zamiast endl?
3 listopada 2006 07:35:51Rzutując na string tworzysz nowy obiekt. Najprawdopodobniej jest wtedy allokowana nowa pamięć i stary tekst kopiowany. Po co?
3 listopada 2006 08:33:43A jak się pozbyć cout (zamieniając na printf) i endl (\n), to będzie to już C, a nie C++ i od razu jest dużo przyjemniej. ;-)
@jajcuś – ja to wiem, ale w takim razie może od razu to sprawdzenie trzeba przepisać w asemblerze? Poza tym czemu będzie przyjemniej, jak to będzie C?
3 listopada 2006 08:41:28Widziałeś ;-)?
Ale pewne zalety używania C zamiast C++ są: mniejszy kod wynikowy (zapewne i w tym przypadku), w Linuksie brak zależności od libstdc++, którego ABI się często zmienia. Mniejsze wymagania co do kompilatora (problemy z kompatybilnością różnych kompilatorów C++ bywały bardzo częste i dość poważne).
Języki wyższego poziomu są generalnie lepsze niż języki niskiego poziomu. Ale C++ to chyba jeden z najgorszych języków wysokiego poziomu. Jest strasznie skomplikowany i zachował wiele wad języka C (wskaźniki i ręczna allokacja pamięci, brak odśmiecacza). Jeśli ja mam wybierać między prostym językiem niższego poziomu©, a skomplikowanym językiem poziomu nieco wyższego (C++)... wybieram to pierwsze. W innych przypadkach zwykle użyję Pythona.
3 listopada 2006 08:52:10‘\n’ nie jest trudne w użyciu, brzydkie jest.
3 listopada 2006 09:02:14strcmp, pewnie że można, zaoszczędzę trochę pamięci, zużycie procesora spadnie tylko że za chwil parę będę się zastanawiał do czego służył strcmp.
A to rozwiązanie wydaje się najbardziej intuicyjne i ładnie wygląda ;)
Cud, że nie musiałem definiować operatora ==, żeby cuś takiego osiągnąć
lubię c++... naprawdę ;)
Zależy od gustu. Dla mnie brzydkie jest dodawanie dodatkowego zapisu do strumienia dla jednego znaku.
A instrukcje do operowania na ciągach znaków, tak czy siak powinieneś znać. A akurat ich nazwy są na tyle intuicyjne, że naprawdę trzeba się wysilić, żeby nie domyślić się, do czego służy strcmp().
@vilma: Pisanie w Assemblerze sprawia problemy z przenośnością kodu. strcmp() nie powinno sprawić jakichkolwiek problemów pod jakąkolwiek platformą.
3 listopada 2006 18:38:53Nie widze tutaj nic dziwnego… Jak ty chcesz porównywać tablice charów ze zwykłym napisem ?? do tego służy strcmp z tego co pamiętam!
2 grudnia 2006 23:31:38