"Multics" OS에서 광범위하게 사용 된 IBM 2741 터미널이 개발 팀 멤버로 C 언어 작성자 인 Dennis Ritchie를 사용하기[]
때문에 대괄호 는 입력하기가 더 쉽습니다 .
IBM 2741 레이아웃에서 중괄호 가 없음 을 참고하십시오 !
C에서는 대괄호가 배열과 포인터에 사용되므로 "중괄호"가 사용됩니다 . 언어 설계자가 배열과 포인터가 코드 블록보다 더 중요하고 자주 사용될 것으로 예상한다면 ( 아래의 코딩 스타일의 역사적 맥락에서 합리적으로 가정 하는 것처럼 들리면 ) 중괄호가 "중요하지 않음"을 의미합니다. "구문.
배열의 중요성은 Ritchie 의 C 언어 개발 기사에서 매우 분명합니다 . "C 프로그램에서 포인터가 널리 퍼져있다" 는 명백한 가정도있다 .
... 새로운 언어 는 배열의 의미론에 대해 일관되고 실행 가능한 (비정상적인) 설명을 유지했습니다 ... 클래스의 언어 중에서 C의 가장 특징적인 두 가지 아이디어는 배열과 포인터 사이의 관계입니다. C, 배열의 처리 는 정말 미덕이 있습니다. 포인터와 배열의 관계는 드물지만 배울 수 있습니다. 또한이 언어는 몇 가지 기본 규칙과 규칙만으로 런타임에 길이가 변하는 벡터와 같은 중요한 개념을 설명 할 수있는 상당한 힘 을 보여줍니다 .
C 언어가 생성 된 당시의 역사적 맥락과 코딩 스타일에 대한 추가 이해를 위해서는 "C의 기원은 유닉스의 개발과 밀접한 관련이 있습니다" , 특히 OS를 PDP- 11 "C의 초기 버전의 개발" ( 인용 소스 ). 에 따르면 위키 백과 , "1972 년, 유닉스는 C 프로그래밍 언어로 재 작성했다" .
다양한 유닉스 버전의 소스 코드는 예를 들어 유닉스 트리 사이트 에서 온라인으로 볼 수 있습니다. 거기에 제시된 다양한 버전 중에서 가장 관련성이 높은 것은 1972-06 년의 Second Edition Unix 인 것 같습니다 .
Unix의 두 번째 버전은 Bell Labs의 PDP-11을 위해 Ken Thompson, Dennis Ritchie 등이 개발했습니다. 더 많은 시스템 호출과 더 많은 명령으로 1 판을 확장했습니다. 이 판은 또한 C 언어의 시작을 보았습니다.이 언어는 일부 명령을 작성하는 데 사용되었습니다 ...
Second Edition Unix (V2) 페이지 에서 C 소스 코드를 찾아서 연구 하여 일반적인 코딩 스타일에 대한 아이디어를 얻을 수 있습니다.
V2 / c / ncc.c 소스 코드 에서 프로그래머가 대괄호를 쉽게 입력 할 수있게하는 것이 중요하다는 생각을 뒷받침하는 두드러진 예제를 찾을 수 있습니다 .
/* C command */
main(argc, argv)
char argv[][]; {
extern callsys, printf, unlink, link, nodup;
extern getsuf, setsuf, copy;
extern tsp;
extern tmp0, tmp1, tmp2, tmp3;
char tmp0[], tmp1[], tmp2[], tmp3[];
char glotch[100][], clist[50][], llist[50][], ts[500];
char tsp[], av[50][], t[];
auto nc, nl, cflag, i, j, c;
tmp0 = tmp1 = tmp2 = tmp3 = "//";
tsp = ts;
i = nc = nl = cflag = 0;
while(++i < argc) {
if(*argv[i] == '-' & argv[i][1]=='c')
cflag++;
else {
t = copy(argv[i]);
if((c=getsuf(t))=='c') {
clist[nc++] = t;
llist[nl++] = setsuf(copy(t));
} else {
if (nodup(llist, t))
llist[nl++] = t;
}
}
}
if(nc==0)
goto nocom;
tmp0 = copy("/tmp/ctm0a");
while((c=open(tmp0, 0))>=0) {
close(c);
tmp0[9]++;
}
while((creat(tmp0, 012))<0)
tmp0[9]++;
intr(delfil);
(tmp1 = copy(tmp0))[8] = '1';
(tmp2 = copy(tmp0))[8] = '2';
(tmp3 = copy(tmp0))[8] = '3';
i = 0;
while(i<nc) {
if (nc>1)
printf("%s:\n", clist[i]);
av[0] = "c0";
av[1] = clist[i];
av[2] = tmp1;
av[3] = tmp2;
av[4] = 0;
if (callsys("/usr/lib/c0", av)) {
cflag++;
goto loop;
}
av[0] = "c1";
av[1] = tmp1;
av[2] = tmp2;
av[3] = tmp3;
av[4] = 0;
if(callsys("/usr/lib/c1", av)) {
cflag++;
goto loop;
}
av[0] = "as";
av[1] = "-";
av[2] = tmp3;
av[3] = 0;
callsys("/bin/as", av);
t = setsuf(clist[i]);
unlink(t);
if(link("a.out", t) | unlink("a.out")) {
printf("move failed: %s\n", t);
cflag++;
}
loop:;
i++;
}
nocom:
if (cflag==0 & nl!=0) {
i = 0;
av[0] = "ld";
av[1] = "/usr/lib/crt0.o";
j = 2;
while(i<nl)
av[j++] = llist[i++];
av[j++] = "-lc";
av[j++] = "-l";
av[j++] = 0;
callsys("/bin/ld", av);
}
delfil:
dexit();
}
dexit()
{
extern tmp0, tmp1, tmp2, tmp3;
unlink(tmp1);
unlink(tmp2);
unlink(tmp3);
unlink(tmp0);
exit();
}
getsuf(s)
char s[];
{
extern exit, printf;
auto c;
char t, os[];
c = 0;
os = s;
while(t = *s++)
if (t=='/')
c = 0;
else
c++;
s =- 3;
if (c<=8 & c>2 & *s++=='.' & *s=='c')
return('c');
return(0);
}
setsuf(s)
char s[];
{
char os[];
os = s;
while(*s++);
s[-2] = 'o';
return(os);
}
callsys(f, v)
char f[], v[][]; {
extern fork, execv, wait, printf;
auto t, status;
if ((t=fork())==0) {
execv(f, v);
printf("Can't find %s\n", f);
exit(1);
} else
if (t == -1) {
printf("Try again\n");
return(1);
}
while(t!=wait(&status));
if ((t=(status&0377)) != 0) {
if (t!=9) /* interrupt */
printf("Fatal error in %s\n", f);
dexit();
}
return((status>>8) & 0377);
}
copy(s)
char s[]; {
extern tsp;
char tsp[], otsp[];
otsp = tsp;
while(*tsp++ = *s++);
return(otsp);
}
nodup(l, s)
char l[][], s[]; {
char t[], os[], c;
os = s;
while(t = *l++) {
s = os;
while(c = *s++)
if (c != *t++) goto ll;
if (*t++ == '\0') return (0);
ll:;
}
return(1);
}
tsp;
tmp0;
tmp1;
tmp2;
tmp3;
목표로 삼은 실제 응용 프로그램에서의 사용을 기반으로 언어 구문 요소를 나타 내기 위해 문자를 선택하는 실용적인 동기 부여 가이 훌륭한 답변에서 설명 된 것처럼 Zipf의 법칙과 어떻게 유사한 지 주목하는 것이 흥미 롭습니다 ...
주파수와 길이의 관계를 Zipf의 법칙 이라고합니다
... 위 문장의 길이 가 타이핑 속도로 대체되거나 일반화 된다는 유일한 차이점이 있습니다.