C 연산자 /\ 및 \/가 수행한 작업은 무엇입니까?
누구나 C에서 자신의 연산자를 "선언"할 수 있습니다. 즉, C 컴파일러 구루이고 C 컴파일러에 대한 소스 코드를 가지고 있다면 말입니다. ;-)
문제를 해결해야 할 추가 질문:
- C99?gcc에서 이 작업은 어떻게 이루어집니까?
- 그리고 왜 /\ & \/가 떨어졌을까요?
- /\ 및 \/ 연산자가 유효한 유형은 무엇입니까?
구글에서 "/\ \/"를 검색하면 당연히 아무것도 반환되지 않습니다.위키백과에 /\ 또는 \/에 대한 페이지가 없습니다.하지만 비슷한 연산자가 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
'programing' 카테고리의 다른 글
매개 변수에 공백이 있을 때 파워셸에서 msdeploy를 어떻게 부르나요? (0) | 2023.09.24 |
---|---|
"addClass" 전에 "hasClass"를 사용해야 합니까? (0) | 2023.09.24 |
Xcode가 "응용 프로그램 업로드 중"에 고착됨 (0) | 2023.09.24 |
Angular에서 window.location 또는 window.open을 설정합니다.JS는 IE 11에서 "액세스 거부"를 제공합니다. (0) | 2023.09.24 |
실행 중인 컨테이너에서 셸 세션을 시작할 수 있습니까(ssh 없이). (0) | 2023.09.24 |