답변:
C로 작성된 소스 코드 만 실행 파일이 아닌 이식성입니까?
옳은. 어떤 사람들은 그것을 한 번만 쓰고 모든 곳에서 컴파일이라고 부릅니다.
http://en.wikipedia.org/wiki/Write_once,_compile_anywhere .
다른 대안은 한 번만 쓰고 어디서나 실행할 수 있습니다. Java가 좋은 예입니다.
http://en.wikipedia.org/wiki/Write_once,_run_anywhere
부분 크로스 플랫폼 이식성을 달성 할 수 있지만 코드를 수정하지 않고 어디에서나 실행할 수 있습니다.
ISA에만 국한된 것은 아닙니다. 예를 들어 다음과 같이 묻습니다.
x86 용 응용 프로그램은 apple 용 응용 프로그램과 분리되어 있습니까?
그렇습니다. Apple이 x86 하드웨어를 사용하더라도 마찬가지입니다. C 바이너리는 아키텍처 및 운영 체제에 따라 다릅니다.
대부분의 질문에 대한 답변이 있지만 내구성보다 추가하고 싶습니다. 내가 고려해야 할 또 다른 것입니다.
예를 들어, JAVA는 한 번 작성되어 VM이있는 플랫폼 (현재 "런타임 환경")에서 실행될 수 있습니다. 그러나 또 다른 장점은 2011 년 시스템에서 1995 년부터 Java 1.1 코드를 실행할 수 있다는 것입니다. 코드가 i386에서 컴파일되어 AMD64 아키텍처에서 실행하려고하면 불가능합니다.
가상 머신 자체도 개선되었습니다.
그런 다음 일반적으로 가장 이식성이 낮은 언어에서 더 이식성이 높은 언어로 이동합니다. 어셈블러, C와 같은 저수준 컴파일 언어, C ++, 해석 된 언어 또는 가상 컴퓨터 내에서 실행되는 언어.
나는 실제로 언어 나 커뮤니티와 같은 자바 방어자가 아니지만 C와 비교할 때 이식성과 최소한의 성능 손실을 찾고 있다면 갈 길입니다.
한 번 쓰기에 대한 좋은 답변은 어디에서나 컴파일합니다.
사람들은 C의 인기와 향후 대상 플랫폼에서 C 컴파일러를 사용할 가능성이 높기 때문에 C를 휴대용 언어로 생각하고 싶어합니다. 또 다른 요소는 플랫폼 독립적 인 방식으로 일반적인 프로그래밍 작업을 돕는 표준 라이브러리입니다.
따라서 언어의 이식성은 다음에 의해 결정됩니다.
현실적으로 거의 모든 복잡한 C 응용 프로그램은 하드웨어 또는 운영 체제 종속성으로 인해 새로운 플랫폼으로 이동하기 위해 약간의 작업이 필요합니다. 이 프로세스를 포팅이라고합니다.
"이동성"에는 여러 가지 의미가 있습니다. C와 관련하여 다음을 의미합니다.
컴파일러는 다양한 하드웨어 및 운영 체제 플랫폼에 대해 C 용으로 구현되었으며, 70 년대 초반 큰 거래였습니다.
언어의 약간 다른 변형을 인식하는 각 컴파일러 구현과 달리, 언어 자체에 대해 보편적으로 합의 된 표준이 있습니다 (Pascal 및 BASIC과 같은 여러 변형이 있었으므로 C가 처음 설계되었을 때의 큰 거래) 그것은 보편적으로 인정되지 않았다);
이 표준으로 인해 적합한 코드는 다른 플랫폼에서 컴파일 될 때 동일한 동작을 생성합니다.
소스 코드를 휴대용이지만, 새로운 바이너리 각 대상에 대해 생성되어야한다.
그러나 C 소스는 "사소한"이식성이 거의 없습니다. 대부분의 응용 프로그램에서는 특정 플랫폼에 고유 한 확장을 사용하여 언어 표준에 정의 된 것 이상을 수행해야하므로 실제로 소스 코드는 100 % 이식성이 없습니다.
그러나 C는 구현에 많은 영향을 미칩니다. 다양한 데이터 유형의 정확한 크기, 오버플로 동작 등은 모두 구현에 달려 있습니다. 표준은 구현이 준수해야하는 최소 요구 사항을 제공 하지만 구현은 이러한 제한을 초과하지 않습니다.
ISA가 무엇이든 C는 ISA에 한정되지 않습니다. 나는 당신이 PC 확장 카드를 위해 지금 쓸모없는 슬롯을 언급하고 있지 않다고 가정합니다.
매우 많은 플랫폼을위한 표준 호환 C 컴파일러가 있으며 소스 코드에서 완전히 표준 정의 된 언어 기능을 사용하는 경우 모든 플랫폼의 C 컴파일러에서 컴파일 할 수 있어야합니다.
그러나 C 표준은 구현 정의 또는 정의되지 않은 동작으로 기능의 많은 동작을 남깁니다. 이는 정확하게 정의 된 동작이 일부 플랫폼에서 하드웨어가 지원하는 것과 일치하지 않는 경우를 피하면서 C 언어를 일반적으로 저수준 프로그래밍에 더 유용하게 만들기 위해 수행됩니다. 그러나 휴대용 프로그램을 작성하기가 조금 더 어려워집니다.
또한 일부 언어와 달리 C에는 Java 또는 C #이 제공하는 거대한 라이브러리가 제공되지 않습니다. 이식성이 뛰어난 라이브러리는 무엇이든 할 수 있지만 라이브러리를 빌드하고 함께 작동 시키려면 약간의 작업을 수행해야합니다.
C에는 물론 표준 라이브러리가 있지만 범위는 Java, C #, Python 등과 비교할 때 상대적으로 제한적입니다.