Rush 00

Worldi·2021년 10월 10일
0

42seoul

목록 보기
3/15

Rush

공통

  • 컴파일 명령어를 입력 할 수 있나요?

  • gcc 의미, -o 인자의 의미, *.c -> 확장자가 c인 모든 파일 연결하여 main 인 이름으로 실행파일을 만듦.
    -o : 실행파일의 이름을 지정
    -c : 오브젝트 파일을 만듦.
    컴파일러는 ( ex) gcc ) 우리가 짠 high level 언어를 기계가 알아 들을 수 있는 low level 언어로 바구어 주는 역할을 하는데,
    이 과정은 각각 전처리, 컴파일, 어셈블, 링크 과정을 거친다.
    오브젝트 파일들을 연결하여 실행파일을 만드는 것이 링커.

  • 컴파일 명령어에 대한 이해

    • gcc -Wall -Werror -Wextra ./*.c -o main
    • Wall 모든 모호한 코딩에 대해서 경고를 보내는 옵션
    • Werror모든 경고를 컴파일을 중단하는 에러로 취급해서 경고 하나만 나와도 컴파일 중단.
    • Wextra -Wall에 각종 추가적인 Warning옵션을 추가
  • Norminette 통과

  • 42헤더가 포함?

  • 각각의 함수에 대한 로직 및 알고리즘

https://onecellboy.tistory.com/146
https://frontjang.info/entry/GCC-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC%EC%97%90-%EB%8C%80%ED%95%B4-1-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC%EC%9D%98-4%EA%B0%80%EC%A7%80-%EB%8B%A8%EA%B3%84
https://twofootdog.tistory.com/51

main.c

void    rush(int x, int y);

int main(void)
{
    rush(5, 4);
    return (0);
}
  • 함수의 프로토타입이 왜 필요한가요?
    컴파일러는 위에서 아래로 컴파일을 진행하기 때문에, 만약 <B코드>처럼 'MySum 함수의 정의'에 앞서 'MySum 함수의 호출문'이 먼저 등장하게 되면 컴파일러는 아마도 'MySum 함수의 호출문'을 보면서 이런 불평을 할 것입니다." MySum 함수? 난 이런 함수 본적이 없는데! " 즉, 함수는 호출되기 전에 미리 정의되어야 합니다.

| 프로토타입(Prototype)이란?
함수가 호출되기 전에 미리 정의되어야 한다고 바로 위에서 말씀드렸습니다.그렇다면 main 함수 위에 사용자 정의 함수를 작성하면 될까요? 물론 그렇게 해도 되지만,프로그램을 개발하면서 많은 사용자 정의 함수를 만들다 보면 main함수는 점점 아래로 밀릴 것입니다.그렇게 된다면 문서를 보기 힘들어지며, 또한 함수들이 많아지면 각 함수를 찾을 때 찾기 힘들어집니다.이때 필요한 것이 바로 프로토타입(Prototype)입니다.

  • return 0의 의미 : 함수의 반환값 정상적으로 종료되었다는 의미 . 만약 정상적으로 종료가 되지 않았으면 -1과 같은 다른 값을 주어서 운영체제에게 알릴 수 있음.

ft_putchar.c

#include <unistd.h>

void    ft_putchar(char c)
{
    write(1, &c, 1);
}
  • #include의 의미? 문법? 전처리기. 예를 들어서 #include "header.h"라는 코드가 있는경우 시스템에서 header.h 파일을 읽어와 해당 소스파일에 그대로 삽입시킨다.
  • unistd.h를 왜 include하나요? 앞에와 동일하게 unistd.h 파일을 읽어와, 요구조건에 부합하는 write 함수를 쓰려고,
  • 함수에 대한 이해(반환형, 매개변수 등)
  • write함수에 대한 이해
    - [ ] 첫번째 파라미터는 무엇인가 & 입력 가능한 값들은?
    - [ ] 두번째 파라미터는 무엇인가
    - [ ] 세번째 파라미터는 무엇인가
    - [ ] write 함수의 반환값 : 성공하면 출력한 바이트의 수, 실패하면 -1 를 리턴하고, errno 를 출력 write 함수는 buf 로 부터 nbyte 를 읽어와서,파일디스크립터가 가르키는 곳에 출력한다.
    파일 디스크립터 : 파일을 관리하기 위한 추상적인 번호라고 생각하시면됩니다.여기서 파일을 지칭하는 범위는 주변장치(디바이스)역시 포함하며 소켓역시 포함합니다.자세한 처리는 운영체제에게 맡기고 기본 입출력 스트림인 stdin,stdout,stderr 는 역시 파일 디스크립터로 각각 0,1,2번인 정수를 부여받습니다.

https://12bme.tistory.com/211

rush

void    ft_putchar(char c);

void    print_row(int x, char start, char middle, char end)
{
    int col;

    col = 0;
    while (col < x)
    {
        if (col == 0)
        {
            ft_putchar(start);
        }
        else if (col == x - 1)
        {
            ft_putchar(end);
        }
        else
        {
            ft_putchar(middle);
        }
        col++;
    }
}

void    rush(int x, int y)
{
    int tempy;

    tempy = 0;
    if (x > 0)
    {
        while (tempy < y)
        {
            if (tempy == 0)
            {
                print_row(x, 'o', '-', 'o');
            }
            else if (tempy == y - 1)
            {
                print_row(x, 'o', '-', 'o');
            }
            else
            {
                print_row(x, '|', ' ', '|');
            }
            tempy++;
            ft_putchar('\n');
        }
    }
}
  • x에 음수 입력
    • 출력 없음
  • y에 음수 입력
    • 출력 없음
  • x에 0 입력
    • 출력 없음
  • y에 0 입력
    • 출력 없음
  • int 범위 초과하는 양수 입력
    • 컴파일 에러 발생
profile
https://worldi.tistory.com/ 로 블로그 이전합니다.

0개의 댓글