programing

C 연산자 /\ 및 \/가 수행한 작업은 무엇입니까?

skycolor 2023. 9. 24. 12:42
반응형

C 연산자 /\ 및 \/가 수행한 작업은 무엇입니까?

누구나 C에서 자신의 연산자를 "선언"할 수 있습니다. 즉, C 컴파일러 구루이고 C 컴파일러에 대한 소스 코드를 가지고 있다면 말입니다. ;-)

문제를 해결해야 할 추가 질문:

  1. C99?gcc에서 이 작업은 어떻게 이루어집니까?
  2. 그리고 왜 /\ & \/가 떨어졌을까요?
  3. /\ 및 \/ 연산자가 유효한 유형은 무엇입니까?

구글에서 "/\ \/"를 검색하면 당연히 아무것도 반환되지 않습니다.위키백과에 /\ 또는 \/에 대한 페이지가 없습니다.하지만 비슷한 연산자가 XML 문자 개체에 내장되어 있는 것을 발견했습니다!


추가된 출처: I found the offending example in the PDP's cc source file "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);
...
}


실제 구현: The /\ and \/ operators date back as far as 제6판 유닉스 1975 (so far). Examples: 유닉스 V6(1975), 유닉스 V7(1979) and more currently BSD 2.11(1992- 2008)

ISO C89 표준에서는 /\나 / 둘 다 연산자로 정의되어 있지 않으며 이전 버전에서는 정의된 적이 없다고 생각합니다.그리고 제가 아는 한 C99에는 확실히 정의되어 있지 않습니다.

다음은 ANSI C89 표준 초안입니다. 참고: http://flash-gordon.me.uk/ansi.c.txt

(당신은 이상한 아르칸 전처리기 마법의 희생자일 가능성이 높습니다.)

\/겉보기엔 그리고/\…처럼 보입니다.그들은 또한 각각 ∨와 ∧가 될 수도 있습니다.

K&R 2판이나 다른 C북에서 본 적이 없습니다.

투기!

주변에 공간이 있는 경우 다음을 수행합니다.

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;' b와 c의 최댓값을 a에 할당하고, 'a = b \/ c;' 최소한으로 하는 것(혹은 그레그 휴길이 지적한 바와 같이 그 반대일 가능성이 더 높습니다).그리고, 그 당시에는, 현대가 '+= ''operators 는 '로'로 되었습니다.=+' 그리고 사실개의 토큰(이 주장을 뒷받침하는 증거가 없음; 다시 기억에 실패함)이었기 때문에 가상의 'a =/\ b;' (에서는 ' )a /\= b; 입니다.' 는 할당 입니다.

톰슨의 ACM 튜링상 수상 연설 '신뢰에 대한 성찰'이 어느 정도 의미가 있다는 생각도 듭니다.

에 잘 .\/,그렇지만/\는 유효한 구성입니다.단일 선 설명의 두 슬래시를 별도의 선에 배치하는 데 사용됩니다.예를 들어,

/\
/ Comment content

백슬래시 캐릭터가 새 줄을 벗어나 파서가 없던 것처럼 계속되기 때문에 효과가 있습니다.백슬래시 뒤에 공백이 있거나 두 번째 정방향 슬래시를 들여놓은 경우에는 작동하지 않습니다.이 때문에 원하는 만큼 새 줄을 벗어날 수 있습니다.

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

백슬래시는 일반적인 한 줄 주석의 끝에 사용하여 다음 줄로 계속 이어지도록 할 수도 있습니다.

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

C는 그런 연산자를 가진 적이 없습니다.

일반적으로 /는 일부 문자열 시스템에서 이스케이프 코드가 될 수 있지만 /\이(가) 어떤 의미를 갖는지는 확실하지 않습니다.

그들이 어떤 의미를 가졌는지 의심스럽습니다.만약 그런 적이 있다면, 그건 오래전 일입니다.C에서 제거된 주요 연산자는 =+와 =-뿐이며, 이는 +=와 -=의 초기 동의어였습니다.증거를 찾기 위해 DMR의 Primval C 페이지를 보는 것이 좋을 것입니다.

다음은 공식적인 기호 논리를 참조한 것으로 추측합니다.

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

/ 연결(OR)을 나타내는데 사용됩니다. /\는 연결(AND)을 나타내는데 사용됩니다.

()^에서 을 합니다.에서는 약간의 배타적인 또는 를 수행합니다.

V 연산자가 있다고 생각하지 않습니다.그것은 'V'자(혹은 그것과 아주 흡사한 것)입니다.누군가가 변수 이름을 짓고 싶어할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/1540886/what-did-the-c-operators-and-do

반응형