void Func(int a, ClassTypeA *b, StructTypeB &c, int *d);
main()
{
int varA;
ClassTypeA clsB;
StructTypeB strC;
Func(varA, &clsB, strC, &varA); // 컴파일 성공
Func(&clsB, varA, &varA, strC); // 컴파일 에러
}
하지만 만약 이 여러개의 인수가 동일한 타입을 가지고 있다면?
void Func(int id, int height, int weight, int birthYear, int score, int familyNumber)
{
printf("Height %d\n", height);
printf("Weight %d\n", weight);
}
main()
{
int Id = 1;
int weight = 67; // 몸무게
int height = 175; // 키
int birth = 1992; // 태어난 해
int family = 4; // 가족 수
int score = 96; // 성적
Func(Id, height, weight, birth, score, family); // 컴파일 성공
Func(Id, weight, height, birth, family, score); // 컴파일 성공
Func(family, height, score, birth, weight, Id); // 컴파일 성공
}
즉 프로그래머의 실수를 컴파일러가 찾을 수 없다는 뜻.
C/C++
struct Arg
{
int Id;
int height; // 키
int weight; // 몸무게
int birthYear; // 태어난 해
int score; // 성적
int familyNumber; // 가족 수
};
void Func(Argument *arg)
{
printf("Height %d\n", arg->height);
printf("Weight %d\n", arg->weight);
}
main()
{
Argument arg;
arg.Id = 1;
arg.weight = 67; // 몸무게
arg.height = 175; // 키
arg.birthYesr = 1992; // 태어난 해
arg.familyNumber = 4; // 가족 수
arg.score = 96; // 성적
Func(&arg); // 컴파일 성공
}
arg.weight = 175;
arg.height = 67;
Lua
루아에서는 타입 자체가 없으므로 이런 버그가 발생할 가능성 더 큼. 루아에서는 테이블을 이용하여 간단히 구현 가능function Func(m)
print("Height " .. m.height)
print("weight " .. m.weight)
end
Func({Id = 1,
weight = 67; -- 몸무게
height = 175; -- 키
birthyear = 1992, -- 태어난 해
familyNumber = 4; -- 가족 수
score = 96; -- 성적
}
)
C#
C#에서는 변수 이름으로 인수를 전달하는 기능이 있으므로 위와 같이 인수 순서가 헷갈릴 때 유용함namespace Space
{
class Program
{
static void Func(int id, int height, int weight,
int birthYear, int score, int familyNumber)
{
Console.WriteLine("Height {0}", height);
Console.WriteLine("Weight {0}", weight);
}
static void Main(string[] args)
{
int Id = 1;
int weight = 67; // 몸무게
int height = 175; // 키
int birth = 1992; // 태어난 해
int family = 4; // 가족 수
int score = 96; // 성적
Func(id:Id, score:score, weight:weight,
familyNumber:family, height:height, birthYear:birth); // 컴파일 성공
}
}
}
댓글 없음:
댓글 쓰기