Какие _did_ операторы C/\ и \/do?

Любой может "объявить" собственных операторов в C.... то есть, если один из них является гуру компилятора C и имеет исходный код для компилятора C!; -)

Другие вопросы для головоломки:

  1. Как эти операции выполняются в C99? НКУ?...
  2. И почему были /\ и \/drop?
  3. Какими типами были действительные /\ и \/операторы?

Googling для "/\ \/" естественно ничего не возвращает. У Википедии есть страница ни для \\nor \/. Но я заметил, что подобные операторы встроены в объекты XML-символов!


Добавленный источник: Я нашел пример нарушения в исходном файле CPC cc.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);
...
}


Фактические реализации: Операторы /\ и \/относятся к Шестое издание Unix 1975 (пока). Примеры: Unix V6 (1975), Unix V7 (1979) и более в настоящее время BSD 2.11 (1992- 2008)

Ответ 1

\/ looks like sup and /\ looks like inf. They could also be and , respectively.

Я не помню, чтобы когда-либо видел их в K & R 2nd edition или в любой другой книге C.

Ответ 2

Ни/\nor/не определены как операторы в стандарте ISO C89, и я не думаю, что они были когда-либо определены в любой более ранней версии. Насколько я знаю, они определенно не определены на C99.

Здесь проект стандарта ANSI C89, для справки: http://flash-gordon.me.uk/ansi.c.txt

(Вероятно, вы являетесь жертвой какой-то странной магической магии препроцессора)

Ответ 3

Спекуляция!

Если у вас есть пробелы, то:

a /\ b   ===>   a / b

a \/ b   ===>   a / b

Логика: фаза предварительной обработки должна иметь дело с обратным слэшем и символом после, и вполне вероятно, что обращение с обратным слэшем будет как пространство, а обратная косая черта - косой чертой.

Тем не менее, как компилятор SUN C (версия 12), так и компилятор GNU C (версия 4.4) отклоняют код, содержащий обратную косую черту. Но я легко мог поверить, что старые, предстандартные препроцессоры C были менее осторожны в этом.

Соответствие стандартам

Операторы никогда не были частью официальной версии C.

Кроме того, стандарт не позволил бы дать интерпретацию, которую я дал (раздел 5.1.1.2. Фазы перевода, как на C89, так и на C99), но, конечно, нестандартные компиляторы не ограничены стандартом.


Добавлено после публикации источника:

Интересно! Таким образом, для 'a = b /\ c;' представляется правдоподобным назначать maxiumum для b и c для a и a = b \/ c; 'для выполнения минимума (или, как указал Грег Хьюглилл, скорее наоборот). И в те времена было вероятным, что современные операторы += все еще были записаны как "=+" и на самом деле были двумя токенами (никаких подтверждающих доказательств для этого утверждения, отсутствие памяти снова), поэтому гипотетическим "a =/\ b;" (или в современной нотации "a /\= b;" ) был бы оператор max-assign и т.д.

Мне также приходит в голову, что речь Thompson ACM Turing Award "" Размышления о доверии".

Ответ 4

Я не уверен в \/, но /\ является допустимой конструкцией. Он используется, чтобы поместить две слэши одной строки на отдельные строки. Например:

/\
/ Comment content

Это работает, потому что символ обратной косой черты избегает новой строки, и синтаксический анализатор продолжается так, как будто его там не было. Это не будет работать, если после обратного слэша есть пробел или если отступ второй косой черты с отступом. Из-за этого можно избежать столько строк, сколько вам нравится, как в

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

Обратные косые черты также могут использоваться в конце регулярных однострочных комментариев, чтобы они переходили к следующей строке, как в

// Yet another comment \
This line is in the comment \\
And so is this one!

Ответ 5

C никогда не имел этих операторов.

Обычно/будет escape-кодом в некоторых строковых системах, не уверен, что /\ когда-либо имел какое-либо значение.

Ответ 6

Я сомневаюсь, что они когда-либо имели в виду. Если они когда-либо делали это, это было давно. Единственные крупные операторы, которых я знаю, были удалены из C, были = + и = -, которые были ранними синонимами для + = и - =. Вы можете посмотреть на DMR Первоначальная страница C для подтверждения.

Ответ 7

Я собираюсь предположить, что это ссылка на формальную символическую логику:

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

/используется для обозначения дизъюнкции (OR) /\ используется (реже) для обозначения конъюнкции (AND)

Ответ 8

The Caret (^) выполняет побитовое исключение или

Я не верю, что есть оператор "V". Это письмо "V" (или что-то похожее на это похоже). Кто-то может захотеть назвать переменную, которая.