ANSIC 대 기타 C 표준
컴파일러에서 에서( )gcc
다를 .C99 mode
류를 하는 것과 같은 에 대한 입니다.int i
식 loop 식 loop부를 우)std=c99
옵션).여기서 읽고 난 후에 나는 이해합니다.gcc
-ansi
,-std=c89
,그리고.-std=iso9899:1990
모두 ANSIC 표준에 따라 평가하지만/왜/내가 (내가 가정한 가장 최신의 표준)과 같은 새로운 표준을 선택해야 하는지 이해할 수 없습니다.
여러 의 iso
C 언어의 유형 표준, 그 중 첫 번째 표준은 ANSI 표준의 직접 포트입니다.C에 대한 그들의 표준은 업데이트 될 것이지만 C에 대한 원래의 ANSI 표준은 항상 동일하다고 말하는 것이 안전합니까?
보너스 질문:
저는 사실 이것을 제 스스로 알아낼 수 있습니다. 아직 시간을 내어 해결하지 않았기 때문에 누군가가 그것을 알고 있다면 그것은 훌륭합니다. 그렇지 않으면 큰 문제가 되지 않습니다. 나중에 알아보겠습니다. :)
나는 그 책의 꽤 새로운 인쇄물을 가지고 있습니다.The C Programming Language (ANSI)
제 책은 항상 다음과 같은 루프를 보여줍니다.
int i;
for(i = 0; i < foo; i++)
하지만 많은 사람들(대부분은 어린 손가락에 더 많은 프로그래밍 재능을 가지고 있음)은 다음과 같이 루프를 작성합니다.
(int i = 0; i < foo; i++)
쓴 에 요를 게 맞나요?i
할 수 ,만,면,i
어떤 표준으로 컴파일하는지에 관계없이 for loop에만 접근할 수 있습니까?같은 질문을 하는 또 다른 방법은, 만약 내가 그것과 컴파일한다면,c89
i
전체 수 있습니다.c99
i
다 수 .i
두번째 for loop 중 오직 for loop에 의해서만 접근할 수 있습니까?
왜/c89 표준을 선택해야 하는지 c99와 같은 최신 표준을 선택해야 하는지 이해할 수 없습니다.
몇 가지 이유:
1) gcc의 C99 지원은 완전하지 않은 반면, C89 지원은.이것이 (GNU 확장자가 있는) C89가 기본인 이유입니다.따라서 gcc를 사용하여 표준으로 프로그래밍하는 절대적인 스틱러라면 C89를 선택합니다.
2) 마이크로소프트의 컴파일러는 C99를 전혀 지원하지 않습니다.따라서 휴대용 C 코드를 작성하고 싶다면 C89가 일반적인 표준입니다.
ISO는 C에 대한 표준을 업데이트할 것이지만 C에 대한 원래 ANSI 표준은 항상 동일하다고 말하는 것이 안전합니까?
아니요, ISO C99도 ANSI 표준으로 비준되었습니다."안시"라는 이름이 C89에만 붙어있는 것은 불행한 역사적 사고입니다.그렇다고 해서 C89는 항상 C89일 것이고, 최신 ANSIC 표준은 아닙니다.
첫 번째 방식으로 루프를 작성하면 전체 함수에 액세스할 수 있어야 하지만 두 번째 방식으로 작성하면 어떤 표준으로 컴파일하는지에 관계없이 for 루프에만 액세스할 수 있습니까?
에서 두 , C89 에서로 쓸 수 있습니다).-pedantic
표준을 고수한다), 그래서 "어떤 표준을 고수한다"는 것은 없습니다.GNU 확장자가 있는 C 버전은 표준이 아니라 "사투리"입니다. (적어도 맨 페이지에서는 그렇게 부릅니다.)두두는 C89며, C99합니다의 합니다.i
끝까지, 고리까지. 두 모두 는 다음을 제공합니다i
더 넓은 범위
사실 gcc는 GNU 확장이 활성화된 상태에서도 C89의 두 번째 루프를 좋아하지 않습니다.
C는 ANSI에 의해 C89로 표준화되었습니다.이후 ISO에서 C90으로 표준화하였으며, C89와 C90 사이에는 기술적인 차이가 없습니다.
C99는 C 표준의 개정판으로, ISO C 위원회에서 개발하고 ISO와 ANSI에서 모두 표준화했습니다.C89와 C99는 모두 ANSI 표준입니다.일반적으로 말해서, "ANSIC"라는 단어는 보통 C89를 언급합니다; K&R 2판. 책은 C99가 아니라 C89만 다루고 있습니다.
C의 이전 버전을 사용하는 이유는 무엇입니까?최소한 두 가지 이유가 있습니다.먼저 C99를 지원하지 않는 컴파일러가 있을 수 있습니다(예: Microsoft Visual C++는 C89만 지원함).둘째, C99에서 허용되지 않는 C89의 것들을 사용하는 레거시 코드가 많이 있습니다. ("C99 하위 호환성"이라는 질문에서 더 많은 것을 볼 수 있습니다.) 차이점을 설명하는 C99 이론 문서에도 연결되어 있습니다.
"보너스 질문"의 경우, C89에서는 for-statement에 변수를 선언할 수 없고, C99에서는 변수를 선언할 수 있습니다.C89에서 for-statement의 첫 번째 부분은 식입니다.
저는 C 표준에 대한 자세한 설명이 없습니다.
하지만 저의 기본 자세는 기회가 주어졌을 때 C99를 사용하는 것이었습니다.가장 최근에 개발된 표준이라는 사실이 한 가지 이유입니다(저는 "새로운 것이 더 낫다"는 잘못된 인식을 가지고 있습니다.
주된 이유는 루프에 변수를 선언할 수 있기 때문입니다.
C99 유효:
for (int i = 0; i < 100; i++)
{
doSomething();
}
C89, ANSI 이상:
int i;
for (i = 0; i < 100; i++)
{
doSomething();
}
gcc의 C99 구현은 아직 완료되지 않았지만 일상적인 프로그래머 생활에서 상당히 유용하게 사용됩니다.저는 현재 참조를 가지고 있지 않지만, gcc의 경우 이 구현이 종료되는 것으로 간주되는 날에 C99(또는 단순히 방언 gnu99)로 전환할 것이라는 문구가 어딘가에 있습니다.
C99 기능의 사용 여부는 실용적인 부분에서 나누어집니다.
- 코드를 컴파일해야 하는 플랫폼은 무엇입니까?
- 어떤 기능을 얻을 수 있을까요? (내 취향에 맞게 휴대용 프로그램을 쉽게 할 수 있도록)
그리고 감정적인/이념적인 부분.나중에는 공룡 원리를 응용하는 것 외에는 치료법이 없습니다.
언급URL : https://stackoverflow.com/questions/3783762/ansi-c-vs-other-c-standards
'itsource' 카테고리의 다른 글
MySQL 테이블에 값을 삽입할 때 자동 증분 기본 키의 속성을 재정의하는 방법은 무엇입니까? (0) | 2023.09.24 |
---|---|
XML 인스턴스 문서에서 XSD 스키마를 생성하는 도구가 있습니까? (0) | 2023.09.24 |
대시 또는 이름에 하이픈(-)이 있는 Python 모듈 (0) | 2023.09.24 |
MySQL: 일치하는 두 열을 사용하여 한 열에서 다른 열로 데이터 업데이트 (0) | 2023.09.24 |
명령 줄에 있는 비주얼 스튜디오로 x64 코드를 컴파일하는 방법은? (0) | 2023.09.24 |