Co zrobili operatorzy / i / C?

Każdy może "zadeklarować" własne operatory w C.... jeśli ktoś jest guru kompilatora C i ma kod źródłowy do kompilatora C! ;-)

Kolejne pytania zagadka:

  1. jak te operacje wykonywane są w C99? gcc? ...
  2. i dlaczego zostały / \ & \ / porzucone?
  3. dla jakich typów ważne były operatory /\ i\/?

Googling dla "/\ \/" naturalnie nic nie zwraca. Wikipedia ma stronę ani / \ ani \/. Ale zauważyłem formę podobną operatory są wbudowane w encje znaków XML!


źródło dodane: znalazłem poniższy przykład w pliku źródłowym CC PDP " c00.c":
/*
 * Return the next symbol from the input.
 * peeksym is a pushed-back symbol, peekc is a pushed-back
 * character (after peeksym).
 * mosflg means that the next symbol, if an identifier,
 * is a member of structure or a structure tag or an enum tag
 */
symbol()
{
...
 case BSLASH:
  if (subseq('/', 0, 1))
   return(MAX);
  goto unkn;

 case DIVIDE:
  if (subseq('\\', 0, 1))
   return(MIN);
  if (subseq('*',1,0))
   return(DIVIDE);
...
}


Rzeczywiste Wdrożenia: Operatory / \ i \ / pochodzą z szóstej edycji Unix 1975 (dotychczas). Przykłady: Unix V6(1975), Unix V7 (1979) i więcej obecnie BSD 2.11(1992-2008)
Author: NevilleDNZ, 2009-10-09

8 answers

\/ wygląda na to, że sup i /\ wygląda na inf. Mogą też być oraz , odpowiednio.

Nie pamiętam, żebym kiedykolwiek widział je w K & R 2nd edition lub jakiejkolwiek innej książce C.
 14
Author: Sinan Ünür,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-28 05:49:14

Ani/\, ani / nie są zdefiniowane jako operatory w standardzie ISO C89 i nie sądzę, by kiedykolwiek były zdefiniowane w żadnej wcześniejszej wersji. I z tego co wiem, nie są definiowane w C99.

Oto projekt standardu ANSI C89, w celach informacyjnych: http://flash-gordon.me.uk/ansi.c.txt

(prawdopodobnie jesteś ofiarą jakiejś dziwnej magii preprocesora)

 18
Author: Tamas Czinege,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 22:41:06

Spekulacje!

Jeśli masz wokół nich spacje, to:

a /\ b   ===>   a / b

a \/ b   ===>   a / b

Logika: Faza wstępnego przetwarzania ma do czynienia z odwrotnym ukośnikiem i znakiem PO, i jest dość prawdopodobne, aby traktować backslash-space jako spację, a backslash-slash jako ukośnik.

To powiedziaĹ 'o, zarĂłwno kompilator SUN C (Wersja 12), jak i kompilator GNU C (Wersja 4.4) odrzucajÄ ... kod zawierajÄ ... cy ukĹ' ad odwrotny. Ale łatwo mogłem uwierzyć, że stare preprocesory C były mniej ostrożne.

Zgodność z normami

Operatory nigdy nie były częścią oficjalnej wersji C.]}

Ponadto standard nie pozwoliłby na interpretację, którą podałem (sekcja 5.1.1.2 fazy tłumaczenia, zarówno w C89, jak i C99) - ale niestandardowe Kompilatory nie są oczywiście ograniczone przez standard.


dodano po dodaniu źródła:

Ciekawe! Wygląda więc na to, że 'a = b /\ c; 'przypisuje maxiumum b I c do a, A' a = b \/ c; ' do zrób minimum (lub, jak zauważył Greg Hewgill, bardziej prawdopodobne odwrotnie). I w tamtych czasach było prawdopodobne, że współczesne operatory "+= " były jeszcze zapisywane jako '=+' i były w rzeczywistości dwa żetony (Brak dowodów potwierdzających to twierdzenie; znowu brak pamięci), więc hipotetyczny "a =/\ b; "(lub, we współczesnej notacji, " a /\= b;") byłby operatorem Max-assignment, itd.

Przyszło mi też do głowy, że przemówienie Thompsona z okazji nagrody Turinga " refleksje O zaufaniu zaufanie " jest w jakiś sposób istotne.

 10
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-09 02:28:13

Nie jestem pewien \/, ale /\ jest poprawnym konstruktem. Służy do umieszczania dwóch ukośników komentarza pojedynczej linii na osobnych liniach. Na przykład:

/\
/ Comment content

To działa, ponieważ znak ukośnika ucieka z nowej linii, a parser kontynuuje, jakby go tam nie było. To nie zadziała, jeśli po ukośniku wstecznym znajduje się spacja lub jeśli drugi Ukośnik jest wcięty. Z tego powodu możliwe jest uniknięcie tylu nowych linii, ile chcesz, jak w

/\
\
\
\
\
/ Still a legal comment.

Ukośniki może być również używany na końcu zwykłych komentarzy jednowierszowych, aby przejść do następnego wiersza, jak w

// Yet another comment \
This line is in the comment \\
And so is this one!
 6
Author: Cristián Romo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-09 23:22:35

C nigdy nie miał takich operatorów.

Typowo / byłby kodem escape w niektórych systemach łańcuchowych, nie jestem pewien, czy /\ kiedykolwiek miało jakieś znaczenie.

 3
Author: Cade Roux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 22:43:38

Wątpię, żeby cokolwiek znaczyły. Jeśli kiedykolwiek to zrobili, to było to dawno temu. Jedynymi znanymi operatorami, które zostały usunięte z C były = + i= -, które były wczesnymi synonimami dla + = i -=. Możesz zajrzeć na pierwotną stronę DMR C w poszukiwaniu dowodów.

 3
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 22:50:33

Zgaduję, że są to nawiązania do formalnej logiki symbolicznej:

Http://en.wikipedia.org/wiki/Table_of_logic_symbols

/ jest używany do oznaczenia dysjunkcji (lub) /\ jest używane (rzadziej) do oznaczenia koniunkcji (i)

 3
Author: Quintus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 23:58:13

Caret (^) wykonuje bitowo exclusive or.

Nie wierzę, że istnieje operator "V". To jest litera " V "(lub coś, co wygląda jak to). Ktoś może chcieć nazwać zmienną, która.
 1
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 22:47:57