Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Operacje na wskaźniku - kiedy standard określa niezdefiniowane zachowanie?

Ostatnio zmodyfikowano 2015-01-05 21:52
Autor Wiadomość
Kaikso
» 2015-01-03 23:30:33
@DejaVu: Gdzie się stosuje tak prymitywne procesory? Nawet AVR i ARM poprawnie zadziałają.
P-124036
DejaVu
» 2015-01-04 00:05:33
@Kaikso: Twoja argumentacja nadal nie opiera się o standard tylko jakieś tam stwierdzenia. Przytocz cytaty ze standardu, że ten kod ma sens i zachowanie jest zdefiniowane jeżeli cokolwiek chcesz udowodnić. Ty argumentujesz 'że działa', a my ustalamy 'co mówi standard'.
P-124038
SocrateZ
» 2015-01-04 00:12:02
Czyli zgodnie z tym co mówi @Alueril jednak miałem racje.
Przecież ten kod:
tekst + strlen( tekst ) - 1
da ten sam wynik co ten:
tekst - 1 + strlen( tekst )

A błędem będzie taki zapis:
C/C++
c1 = tekst - 1;
c1 = tekst + strlen( tekst );

Chyba że źle to zrozumiałem.

// EDIT
Jednak źle zrozumiałem.

@antonio
Jednak to nie zmienia wyniku działania programu, do c1-->=c2 dodałem jeszcze znak =.
Odpowiedź na to dlaczego tam jest N masz w odpowiedzi nr P-123981 na pierwszej stronie.
P-124039
Kaikso
» 2015-01-04 00:14:15
Samo wyrażenie jest nieprzewidywalne, ale cały kod na żadnej platformie nie zostanie błędnie zinterpretowany, aby tak się stało kompilator musiałby być niezgodny ze standardem. Problemem tu jest wewnętrzna niezgodność standardu.
To próbowałem udowodnić. A że według standardu jest to niezdefiniowane zachowanie to jest to prawda ale nie w każdym wypadku. Przedstawiony tu kod zawsze będzie przewidywalny.

Twoja argumentacja nadal nie opiera się o standard tylko jakieś tam stwierdzenia.
"Jakieś tam stwierdzenia" - oj chyba nie jakieś tam, bo to jest praktyczne zachowanie (na 100% przewidywalne), a standard to jest teoretyczne.
P-124040
Krump
» 2015-01-04 00:35:52
@Kaikso Prymitywne procesory stosuje się w wielu urządzeniach , przykładem są urządzenia pomiarowe, które np mają za zadanie wykonywać określona małą ilość operacji.

W ogóle nie wiem, skąd ta dyskusja, w tym wątku. temat został dawno rozwiązany, a ostatnie strony to tylko jakaś przepychanka. Prosiłbym o pomoc w innych tematach, a nie kłócenie się o rzecz rozwiązaną w tym.
P-124041
Kaikso
» 2015-01-04 00:43:25
@Up: Tak ale takie procesory zwykle i tak wykonują poprawnie tą operacje. A jeśli są na tyle prymitywne że nie to zapewne zaimplementowanie języka C dla nich jest kompletnie bezcelowe.
Przykładem są urządzenia pomiarowe, które np mają za zadanie wykonywać określona małą ilość operacji
Właśnie tutaj nie ma sensu używać języka C.
P-124044
Krump
» 2015-01-04 01:03:39
Oczywiście, że ma, zależy co się wykonuje sam ostatnio oprogramowywałem układ scalony wzmacniacza odoperacyjnego za pomocą C, gdyż producent to narzucił, co dziwne gdyż często się stosuje VHDL (ale się od niego odchodzi na rzecz bardziej zrozumiałego języka C). Ale wszelkiego rodzaju układy kombinacujne: sumatory, kompaktory, dekodery, kodery, multipleksery, czy układy matrycowe posiadają prymitywne procesory, gdyż inne nie sa potrzebne, a oprogramowuje się je w języku C. Elektronikom (w tym mi) jest to bardzo znane i naturalne. Nawet na uczelni, podczas nauki języka C zadania są tego typu, aby go używać do oprogramowania tego typu sprzętów.
P-124047
SocrateZ
» 2015-01-04 01:06:32
Assembler odchodzi w zapomnienie. Taki piękny język.
P-124049
1 2 3 4 5 « 6 » 7 8
Poprzednia strona Strona 6 z 8 Następna strona