C 언어 시작하기

Download c eBook

비고

C는 구조화 된 프로그래밍, 어휘 변수 범위 및 재귀를 지원하는 범용, 명령형 컴퓨터 프로그래밍 언어이며 정적 유형 시스템은 많은 의도되지 않은 작업을 방지합니다. 설계 상 C는 ​​일반적인 기계 명령어에 효율적으로 매핑되는 구조를 제공하므로 이전에는 운영 체제를 비롯한 어셈블리 언어로 코딩 된 응용 프로그램뿐만 아니라 수퍼 컴퓨터에서 임베디드 시스템에 이르기까지 다양한 컴퓨터 용 응용 프로그램 소프트웨어에서도 오래 동안 사용되었습니다. .

낮은 수준의 기능에도 불구하고이 언어는 플랫폼 간 프로그래밍을 장려하기 위해 고안되었습니다. 표준 호환 및 이식 가능하게 작성된 C 프로그램은 소스 코드를 거의 변경하지 않고 매우 다양한 컴퓨터 플랫폼 및 운영 체제 용으로 컴파일 할 수 있습니다. 이 언어는 임베디드 마이크로 컨트롤러에서 수퍼 컴퓨터에 이르기까지 매우 다양한 플랫폼에서 사용할 수있게되었습니다.

C는 원래 Bell Labs에서 1969 년과 1973 년 사이에 Dennis Ritchie가 개발했으며 Unix 운영 체제를 다시 구현하는 데 사용되었습니다. 그 이후로 현재 널리 사용되는 프로그래밍 언어 중 하나가되어 다양한 벤더의 C 컴파일러가 대부분의 기존 컴퓨터 아키텍처 및 운영 체제에서 사용할 수 있습니다.

공통 컴파일러

C 프로그램을 컴파일하는 프로세스는 컴파일러와 운영 체제에 따라 다릅니다. 대부분의 운영 체제는 컴파일러없이 제공되므로 설치해야합니다. 일반적인 컴파일러 선택은 다음과 같습니다.

다음 문서는 가장 일반적인 컴파일러를 사용하여 시작하는 방법에 대한 좋은 개요를 제공합니다.

컴파일러 C 버전 지원

컴파일러는 표준 C에 대해 다양한 수준의 지원을 제공하지만 C99를 완전히 지원하지 않는 경우가 많습니다. 예를 들어, 2015 릴리스부터 MSVC는 C99의 많은 부분을 지원하지만 아직 언어 자체 (예 : 전처리가 부적합한 것처럼 보임) 및 C 라이브러리 (예 : <tgmath.h> )에 대한 지원을위한 몇 가지 중요한 예외가 있습니다. 필연적으로 "구현 종속적 선택"을 문서화해야합니다. Wikipedia는 인기있는 컴파일러가 제공하는 지원을 보여주는 테이블가지고 있습니다.

일부 컴파일러 (특히 GCC)는 컴파일러 제작자가 필요하거나 도움이된다고 생각하는 추가 기능을 구현하는 컴파일러 확장 을 제공하거나 계속 제공하고 있으며 향후 C 버전의 일부가 될 수 있지만 현재 C 표준의 일부는 아닙니다. 이러한 확장 기능은 컴파일러에 따라 다르기 때문에 상호 호환되지 않는 것으로 간주 될 수 있으며 컴파일러 개발자는 이후 컴파일러 버전에서이를 제거하거나 변경할 수 있습니다. 이러한 확장 기능의 사용은 일반적으로 컴파일러 플래그로 제어 할 수 있습니다.

또한 많은 개발자들은 자신이 목표로 삼고있는 환경이나 플랫폼에 의해 부과 된 특정 버전의 C 만 지원하는 컴파일러를 가지고 있습니다.

컴파일러를 선택하는 경우 대상 환경에 허용되는 최신 버전의 C를 가장 잘 지원하는 컴파일러를 선택하는 것이 좋습니다.

코드 스타일 (여기에 주제 제외) :

C에서 공백이 중요하지 않으므로 (즉, 코드 작동에 영향을 미치지 않음) 프로그래머는 코드를 읽기 쉽고 이해하기 쉽게하기 위해 종종 공백을 사용합니다. 이것을 코드 스타일 이라고합니다. 이것은 소스 코드를 작성할 때 사용되는 일련의 규칙과 지침입니다. 여기에는 줄을 들여 쓰는 방법, 공백이나 탭의 사용 여부, 중괄호 배치 방법, 연산자와 대괄호 주위에 공백을 사용하는 방법, 변수의 이름 지정 방법 등이 포함됩니다.

코드 스타일은 표준에서 다루지 않으며 주로 의견 기반입니다 (다른 사람들은 다른 스타일을 더 쉽게 읽을 수 있음). 따라서 일반적으로 SO에서 주제가 아닌 것으로 간주됩니다. 자신의 코드에서 스타일에 대한 가장 중요한 조언은 일관성이 무엇보다 중요하다는 것입니다. 스타일을 선택하거나 만들어야합니다. 자신의 스타일을 만드는 것보다는 프로그래머가 선택하는 일반적인 사용법에 다양한 명명 된 스타일이 있음을 설명하기에 충분합니다.

일반적인 들여 쓰기 스타일은 K & R 스타일, Allman 스타일, GNU 스타일 등입니다. 이 스타일 중 일부는 변형이 다릅니다. 예를 들어, Allman은 Allman 또는 Allman-8로 널리 사용됩니다. 인기있는 스타일에 대한 정보는 Wikipedia 에서 찾을 수 있습니다. 이러한 스타일 이름은 작성자 또는 조직이 코드에 기여하는 많은 사람들이 사용하기 위해 자주 게시하는 표준에서 가져온 것이므로 모든 사람들이 스타일을 알면 코드를 쉽게 읽을 수 있습니다. 예를 들어 GNU 형식 지정 안내서 GNU 코딩 표준 문서

UpperCamelCase, lowerCamelCase, lower_case_with_underscore, ALL_CAPS 등이 있습니다. 이러한 스타일은 다양한 객체 및 유형과 함께 사용하기 위해 다양한 방법으로 결합됩니다 (예 : 매크로는 종종 ALL_CAPS 스타일을 사용합니다)

K & R 스타일은 일반적으로 SO 문서 내에서 사용하는 것이 좋지만 Pico와 같은 더 복잡한 스타일은 사용하지 않는 것이 좋습니다.

C 표준에 포함되지 않은 라이브러리 및 API (따라서 여기에서 벗어나는 주제) :

버전

번역 표준 발행일
케이 앤 리 해당 없음 1978-02-22
C89 ANSI X3.159-1989 1989-12-14
C90 ISO / IEC 9899 : 1990 1990-12-20
C95 ISO / IEC 9899 / AMD1 : 1995 1995-03-30
C99 ISO / IEC 9899 : 1999 1999-12-16
C11 ISO / IEC 9899 : 2011 2011 년 12 월 15 일

안녕하세요 세계

화면에 "Hello, World" 를 출력하는 간단한 C 프로그램을 만들려면 텍스트 편집기 를 사용하여 다음 소스 코드가 포함 된 새 파일 (예 : hello.c - 파일 확장자는 .c 여야 함)을 만듭니다.

hello.c

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

Coliru의 라이브 데모

이 간단한 프로그램을 한 줄씩 살펴 보겠습니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

이 행은 표준 라이브러리 헤더 파일 stdio.h 의 내용을 프로그램에 포함 시키도록 컴파일러에 지시합니다. 헤더는 일반적으로 함수 선언, 매크로 및 데이터 형식을 포함하는 파일이며 사용하기 전에 헤더 파일을 포함해야합니다. 이 줄에는 stdio.h 포함되어 있으므로 puts() 함수를 호출 할 수 있습니다.

헤더에 대해 자세히 알아보십시오.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

이 줄은 함수의 정의를 시작합니다. 함수 이름 ( main ), 예상되는 인수의 유형 및 수 ( void , 의미 없음) 및이 함수가 반환하는 값 유형 ( int )을 설명합니다. 프로그램 실행은 main() 함수에서 시작됩니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

중괄호는 쌍으로 사용되어 코드 블록이 시작하고 끝나는 곳을 나타냅니다. 그것들은 많은 방법으로 사용될 수 있지만,이 경우에는 함수가 시작하고 끝나는 곳을 나타냅니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

이 행은 puts() 함수를 호출하여 텍스트를 표준 출력 (기본적으로 화면)에 출력하고 줄 바꿈을 추가합니다. 출력 할 문자열은 괄호 안에 포함됩니다.

"Hello, World" 는 화면에 쓰여지는 문자열입니다. C에서 모든 문자열 리터럴 값은 큰 따옴표 "…" 안에 있어야합니다.

문자열에 대해 자세히 알아보십시오.

C 프로그램에서 모든 구문은 세미콜론 ( ; )으로 끝나야합니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

main() 을 정의했을 때 int 반환하는 함수로 선언했습니다. 즉, 정수를 반환해야합니다. 이 예제에서는 프로그램이 성공적으로 종료되었음을 나타내는 데 사용되는 정수 값 0을 반환합니다. return 0;return 0; 명령문을 실행하면 실행 프로세스가 종료됩니다.

프로그램 편집하기

간단한 텍스트 편집기에는 Linux의 vim 또는 gedit 또는 Windows의 Notepad 됩니다. 크로스 플랫폼 편집기에는 Visual Studio Code 또는 Sublime Text 도 포함됩니다.

편집기는 RTF 또는 다른 형식이 아닌 일반 텍스트 파일을 만들어야합니다.

프로그램 컴파일 및 실행

프로그램을 실행하려면이 소스 파일 ( hello.c )을 먼저 실행 파일 (예 : Unix / Linux 시스템에서는 hello , Windows에서는 hello.exe )로 컴파일해야합니다. 이것은 C 언어 용 컴파일러를 사용하여 수행됩니다.

컴파일에 대해 자세히보기

GCC를 사용하여 컴파일

GCC (GNU Compiler Collection)는 널리 사용되는 C 컴파일러입니다. 이를 사용하려면 터미널을 열고 명령 줄을 사용하여 소스 파일의 위치로 이동 한 후 다음을 실행하십시오.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

소스 코드 ( hello.c )에 오류가 없으면 컴파일러는 -o 명령 줄 옵션 ( hello )에 대한 인수로 지정된 이름의 이진 파일 을 만듭니다. 이것은 최종 실행 파일입니다.

또한 프로그램을 중단 시키거나 예기치 않은 결과를 초래할 수있는 문제를 식별하는 데 도움이되는 경고 옵션 -Wall -Wextra -Werror 를 사용할 수 있습니다. 이 간단한 프로그램에는 필요하지 않지만 추가하는 방법은 다음과 같습니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

clang 컴파일러 사용하기

clang 을 사용하여 프로그램을 컴파일하려면 다음을 사용할 수 있습니다.

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

의도적으로 clang 명령 행 옵션은 GCC 명령 행 옵션과 유사합니다.

명령 줄에서 Microsoft C 컴파일러 사용

Visual Studio 를 지원하는 Windows 시스템에서 Microsoft cl.exe 컴파일러를 사용하고 모든 환경 변수가 설정된 경우이 C 예제는 명령이 실행되는 디렉토리에서 실행 파일 hello.exe 를 생성하는 다음 명령을 사용하여 컴파일 될 수 있습니다 ( cl 경우 /W3 과 같은 경고 옵션이 있으며 GCC의 경우 -Wall etc 또는 clang과 비슷합니다).

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}
 

프로그램 실행

일단 컴파일되면 터미널에서 ./hello 를 입력하여 바이너리 파일을 실행할 수 있습니다. 실행시, 컴파일 된 프로그램은 명령 프롬프트에 Hello, World , 그 다음에 개행 문자를 인쇄합니다.

원본 "Hello, World!" K & R C에서

다음은 원래 "Hello, World!"입니다. 이 책에서 프로그램의 C 프로그래밍 언어 브라이언 커니 핸과 데니스 리치에 의해 (리치가 벨 연구소에서 C 프로그래밍 언어의 원래 개발자이었다)는 "K & R"이라한다 :

케이 앤 리
#include <stdio.h>

main()
{
    printf("hello, world\n");
}
 

C 프로그래밍 언어는이 책의 초판 작성 시점 (1978 년)에 표준화되지 않았으며이 프로그램은 C90 코드를 받아 들일 것을 지시하지 않는 한 대부분의 현대 컴파일러에서 컴파일되지 않을 것임을 주목하십시오.

main() 대한 명시 적 리턴 유형이없고 return 문이 없기 때문에 K & R 서적의 첫 번째 예제는 품질이 좋지 않은 것으로 간주됩니다. 이 책의 두 번째 판은 오래된 C89 표준을 위해 쓰여졌습니다. C89에서 main 유형은 int 기본 설정되지만 K & R 예제는 환경에 정의 된 값을 반환하지 않습니다. C99 및 이후 표준에서는 반환 형식이 필요하지만 C99 5.1.2.2.3에서 도입 된 특수한 경우 때문에 main (및 main 만)의 return 문을 생략해도 안전합니다. 0을 반환하는 것과 같습니다 , 성공을 나타냅니다.

의 권장 대부분의 휴대용 형태의 main 호스트 시스템은 int main (void) 프로그램이 어떤 명령 줄 인수, 또는 사용하지 않을 때 int main(int argc, char **argv) 프로그램이 명령 줄 인수를 사용하지 때.


C90 §5.1.2.2.3 프로그램 종료

받는 사람 초기 호출에서 반환 main 기능은 호출하는 것과 같습니다 exit 에 의해 반환 된 값과 기능 main 인수로서 기능한다. main 함수가 값을 지정하지 않은 반환을 실행하면 호스트 환경에 반환 된 종료 상태는 정의되지 않습니다.

C90 §6.6.6.4 return

표현식이없는 return 문이 실행되고 호출자가 함수 호출의 값을 사용하면 동작은 정의되지 않습니다. 함수를 종료시키는 } 도달하는 것은 표현식없이 return 문을 실행하는 것과 같습니다.

C99 §5.1.2.2.3 프로그램 종료

의 반환 형식 경우 main 기능과 유형 호환 int 의에 대한 초기 호출에서 반환 main 기능은 호출하는 것과 같습니다 exit 에 의해 반환 된 값과 기능 main 인수로서 기능을; } 에 도달하면 main 함수를 종료하고 값은 0을 반환합니다. 반환 유형이 int 와 호환되지 않으면 호스트 환경에 반환 된 종료 상태가 지정되지 않습니다.

Stats

4443 Contributors: 67
Thursday, July 27, 2017
아래 라이선스: CC-BY-SA

와 제휴하지 않음 Stack Overflow
Rip Tutorial: info@zzzprojects.com

eBook 다운로드