Proč je syntaxe programovacích jazyků tak složitá?

Mlocik97

  • *****
  • 949
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #120 kdy: 25. 12. 2018, 21:21:37 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.


lopata

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #121 kdy: 25. 12. 2018, 21:24:32 »
ja když predám funkci b_e prázdny string, tak to vráti prázdny string a teda aj vypíše prázdny riadok... v prípade že mu predám NULL tak vypíše NULL.
V tom případě děláš něco blbě, protože tvůj vlastní kód dělá něco jiného, pro prázdný string vrací '\0' alias 0 alias NULL.

Mlocik97

  • *****
  • 949
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #122 kdy: 25. 12. 2018, 21:28:30 »
ja když predám funkci b_e prázdny string, tak to vráti prázdny string a teda aj vypíše prázdny riadok... v prípade že mu predám NULL tak vypíše NULL.
V tom případě děláš něco blbě, protože tvůj vlastní kód dělá něco jiného, pro prázdný string vrací '\0' alias 0 alias NULL.

'\0' nieje žiadna alias NULL!!!!!!!!!!!!!

Neviditelný

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #123 kdy: 25. 12. 2018, 21:29:59 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.

Fakt?
Kód: [Vybrat]
madcat@The-Raza ~/Devel/zzz # cat n.c
#include <stdio.h>

int main()
{
        printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");

        return 0;
}
madcat@The-Raza ~/Devel/zzz # clang -Wall -Wextra -pedantic n.c -o n
madcat@The-Raza ~/Devel/zzz # ./n                                   
Equals? Yes

No nic, mír s vámi...

Martin

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #124 kdy: 25. 12. 2018, 21:35:50 »
No nic, mír s vámi...
+1
Napr string.h obsahuje
#define NULL    0


lopata

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #125 kdy: 25. 12. 2018, 21:36:43 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.
Hodnota NULL je stejná jako '\0', prostě 0. Typ je jiný, C pro NULL nespecifikuje typ, může to být (int) nebo třeba ((void*) 0). Ty vracíš returnem (char) 0, což se automaticky zkonvertuje na (int) 0, respektive ((void*) 0), neboli NULL.

Zdenda

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #126 kdy: 25. 12. 2018, 21:39:46 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.
Hodnota NULL je stejná jako '\0', prostě 0. Typ je jiný, C pro NULL nespecifikuje typ, může to být (int) nebo třeba ((void*) 0). Ty vracíš returnem (char) 0, což se automaticky zkonvertuje na (int) 0, respektive ((void*) 0), neboli NULL.

NULL je NULL. Spolehat ze to je typove shodne s \0, 0 nebo "" je znak nevyzratosti programatora.

lopata

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #127 kdy: 25. 12. 2018, 21:41:49 »
'\0' nieje žiadna alias NULL!!!!!!!!!!!!!
Však proto ti píšu, že je ten tvůj program blbě a máš tam typovou chybu. '\0' má stejnou hodnotu jako NULL, ale jiný typ. Něco to dělá jen z toho důvodu, že C pomocí implicitních konverzí vyrobí z '\0' NULL a to z té funkce taky vracíš. Nedělá to ovšem to, co bys předpokládal, proto jsi z toho tak zmatený.

Kit

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #128 kdy: 25. 12. 2018, 22:02:38 »
Kód: [Vybrat]
madcat@The-Raza ~/Devel/zzz # cat n.c
#include <stdio.h>

int main() {
        printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");
        return 0;
}
madcat@The-Raza ~/Devel/zzz # clang -Wall -Wextra -pedantic n.c -o n
madcat@The-Raza ~/Devel/zzz # ./n                                   
Equals? Yes
No nic, mír s vámi...

Fakt, že tvůj program podporuje tvé tvrzení, ještě neznamená, že není špatně. Kompilátor ho sice zbaští, ale je to dáno tím, že principy jazyka C jsou již zastaralé a nevyhovují dnešním požadavkům. Assembler se sice stále dá používat, ale vývojáři se mu vyhýbají, protože se v něm dá snadno střelit do nohy a nebude mu to vadit. Totéž platí i pro C, které je vlastně jen lepším assemblerem. Na dnešní potřeby už nestačí.

Mlocik97

  • *****
  • 949
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #129 kdy: 25. 12. 2018, 22:23:43 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.
Hodnota NULL je stejná jako '\0', prostě 0. Typ je jiný, C pro NULL nespecifikuje typ, může to být (int) nebo třeba ((void*) 0). Ty vracíš returnem (char) 0, což se automaticky zkonvertuje na (int) 0, respektive ((void*) 0), neboli NULL.
NULL je NULL. Spolehat ze to je typove shodne s \0, 0 nebo "" je znak nevyzratosti programatora.


presne

RDa

  • *****
  • 3 067
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #130 kdy: 25. 12. 2018, 22:26:34 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.

Fakt?
Kód: [Vybrat]
madcat@The-Raza ~/Devel/zzz # cat n.c
#include <stdio.h>

int main()
{
        printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");

        return 0;
}
madcat@The-Raza ~/Devel/zzz # clang -Wall -Wextra -pedantic n.c -o n
madcat@The-Raza ~/Devel/zzz # ./n                                   
Equals? Yes

No nic, mír s vámi...

Chtelo by to pouzit vyzralejsi prekladac a ne nejaky trapny pokus o nej :)

Kód: [Vybrat]
$ gcc -Wall -Wextra -pedantic n.c -o n
n.c: In function ‘main’:
n.c:4:38: warning: comparison between pointer and zero character constant [-Wpointer-compare]
         printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");
                                      ^~
In file included from /usr/include/_G_config.h:15:0,
                 from /usr/include/libio.h:31,
                 from /usr/include/stdio.h:41,
                 from n.c:1:
n.c:4:33: note: did you mean to dereference the pointer?
         printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");

agent

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #131 kdy: 25. 12. 2018, 22:31:23 »
takže podľa tebe je jednoduchšie povedať "chcem dolnú časť žemle hamburgeru na ňom kurací rezeň, a na ňom hornú časť žemle hamburgeru" než "chcem kurací hamburger", to je teda fajn logika. Čitatelnejšie to o nič nieje, a ani to nepotrebuješ. Predsa si hamburger kupuješ ako celok. Obsah hamburgeru zaujíma len zamestnanca mcdonalda, ktorý ale vytvára celistvý "produkt" teda hamburger.
Protože chceš hamburger, zavoláš funkci dejHamburger(), která bude obsahovat něco jako:
Kód: [Vybrat]
function dejHamburger() {
  var hamburger = dolniPulkaHousky() + salat() + rajce() + maso() + okurka() + horniPulkaHousky();
  return hamburger;
}
A ty jednotlivé funkce už nebudou mít každá 100 řádků.
Ano, jsou situace kdy těch 100 řádků v jedné funkci/proceduře/metodě smysl má, ale zrovna u hamburgeru to určitě potřeba není.

Neviditelný

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #132 kdy: 25. 12. 2018, 23:07:22 »
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.

Fakt?
Kód: [Vybrat]
madcat@The-Raza ~/Devel/zzz # cat n.c
#include <stdio.h>

int main()
{
        printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");

        return 0;
}
madcat@The-Raza ~/Devel/zzz # clang -Wall -Wextra -pedantic n.c -o n
madcat@The-Raza ~/Devel/zzz # ./n                                   
Equals? Yes

No nic, mír s vámi...

Chtelo by to pouzit vyzralejsi prekladac a ne nejaky trapny pokus o nej :)

Kód: [Vybrat]
$ gcc -Wall -Wextra -pedantic n.c -o n
n.c: In function ‘main’:
n.c:4:38: warning: comparison between pointer and zero character constant [-Wpointer-compare]
         printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");
                                      ^~
In file included from /usr/include/_G_config.h:15:0,
                 from /usr/include/libio.h:31,
                 from /usr/include/stdio.h:41,
                 from n.c:1:
n.c:4:33: note: did you mean to dereference the pointer?
         printf("Equals? %s\n", (NULL == '\0') ? "Yes" : "No");
Clang - na rozdíl od GCC - zase správně varuje, že return '\0' z funkce, která vrací char * je potenciální chyba; GCC v tomto případě mlčí. To ale nemá žádný vliv na to, jak takový kód bude fungovat. NULL a '\0' se budou efektivně lišit jen tehdy, pokud bude NULL definováno na něco jiného než (void *)0, což jsem chtěl ukázat.

Kit

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #133 kdy: 25. 12. 2018, 23:19:53 »
Clang - na rozdíl od GCC - zase správně varuje, že return '\0' z funkce, která vrací char * je potenciální chyba; GCC v tomto případě mlčí. To ale nemá žádný vliv na to, jak takový kód bude fungovat. NULL a '\0' se budou efektivně lišit jen tehdy, pokud bude NULL definováno na něco jiného než (void *)0, což jsem chtěl ukázat.

Ukazuješ jen programátorské porno, ze kterého jsme už docela otrávení.

Neviditelný

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #134 kdy: 25. 12. 2018, 23:25:02 »
...

Ukazuješ jen programátorské porno, ze kterého jsme už docela otrávení.
Kdybys tak jen měl možnost tohle vlákno, které zdechlo tak po desátém příspěvku, prostě dál nečíst...