⇒ 분명 실행할때는 char로 해석하는데 매개변수는 int인, 요상꾸리 아리송한 함수들은 implicit funcion declaration(암시적 함수 선언)이 가능했던 시절, 그러니까 아~~~주 오래전의 구닥다리 함수이다.

어차피 char로 해석하게 되는데 매개변수가 int인 알쏭달쏭한 함수들(, ….etc)이 Libft 과제에 나온다.

어차피 char로 해석하게 되는데 매개변수가 int인 알쏭달쏭한 함수들(memset(), memchr()….etc)이 Libft 과제에 나온다.

prototype 선언 안해도 함수의 호출이 가능했던 놀라운 시절의 유산

implicit function declaration (암시적 함수 선언)

… 이 기능은 최신 C언어 표준(C99 등)에서는 빠진 것으로 알고 있습니다. 함수를 호출하려면 반드시 그 전에 선언하라는 거죠. 예전에는 함수 선언이 없었어도 컴파일러가 대충 찍어서 넘겨줬지만, 그에 따른 득(=프로그래머가 코딩할 때 약간 덜 귀찮음)보다는 실(=미정의 동작에 빠진 프로그램을 디버깅하는데 들어가는 상당한 노력)이 더 크다는 겁니다. …

<aside> 💡 default argument promotion (기본 인자 승격) 함수 호출이 원형 선언의 지배를 받지 않는 경우(implicit declaration 등), 혹은 원형 선언이 보이더라도 가변 인자를 갖는 경우, 인자(argument)에 적용되는 일정한 변환 규칙이다.

</aside>

→ 인자와 매개변수의 데이터형에 관심을 덜 써도 정의된 행동을 보장받을 수 있도록한다. (즉 프로그래머가 코드 작성할 때 쫌 편해짐)

  1. int 보다 작은 정수 타입은 int형으로 변환한다.

  2. float형은 double형으로 변환한다.

  3. 나머지 인자는 그대로 전달한다.

(즉 함수의 return 및 parameter의 타입을 모두 int, double형으로 변환)


Why does the function memchr() use int for the argument of char type?