아두이노를 다루다 보면 여러 핀들이 필요하여 스케치에서 핀들을 배열로 정의하여 사용할 경우가 있습니다. 이 때 사용된 핀의 개수를 sizeof 연산자를 사용하여 쉽게 얻을 수 있으며, 핀들을 추가하거나 제거할 때 핀 배열에 핀들만 추가하거나 없애는 것으로 수정할 수 있습니다. <- 배열의 개수를 숫자로 입력하는 하드 코딩을 없애 스케치를 쉽게 수정할 수 있다는 의미입니다^^.
sizeof(배열 변수 이름)/sizeof(배열 변수 자료형)
sizeof 연산자를 사용하면 bool, char, int, short, long, float, double 등과 같은 자료형 혹은 변수들의 크기를 알아낼 수 있습니다. 이 때의 크기란 메모리를 차지하는 최소 단위인 바이트를 의미합니다. 그렇기 때문에 배열의 개수를 얻으려면 sizeof(배열 변수 자료형) 값으로 배열의 크기 값을 나눠주어야 실제 개수를 얻을 수 있습니다.
간단하게 각 자료형의 크기를 출력하고 char와 int로 핀 배열을 만들어 핀 배열들의 크기와 개수를 출력하고, float 배열을 만들어 float 배열의 크기와 개수를 출력하게 예제 스케치를 만들어 보았습니다:
/*
* sizeof(...)
*
* 이 스케치는 sizeof 연산자를 사용하여 자료형의 크기와 배열과
* 같은 변수들의 크기와 배열의 개수를 알아내는 예제입니다.
*
* 이 예제 코드는 공유 저작물입니다.
*
*/
void setup() {
// 여기에 초기화 부분을 넣어 주세요. 이것은 한번만 실행됩니다.
char prompt[] = "sizeof 예제";
char c_pins[] = {2, 3, 4, 5, 6}; // char 핀 배열
int i_pins[] = {2, 3, 4, 5, 6}; // int 핀 배열
int pins = sizeof(i_pins)/sizeof(int); // i_pins[]의 개수
float f_numbers[] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7};
int numbers = sizeof(f_numbers)/sizeof(float);
// 시리얼 모니터로 출력을 위하여 시리얼 포트를 초기화합니다.
Serial.begin(9600);
// 시리얼 모니터로 시작 안내문을 출력합니다:
Serial.println();
Serial.println(prompt);
Serial.println("=============");
// 각각의 자료형의 크기를 출력합니다:
Serial.print("bool : "); Serial.println(sizeof(bool));
Serial.print("char : "); Serial.println(sizeof(char));
Serial.print("short : "); Serial.println(sizeof(short));
Serial.print("int : "); Serial.println(sizeof(int));
Serial.print("long : "); Serial.println(sizeof(long));
Serial.print("long long : "); Serial.println(sizeof(long long));
Serial.print("float : "); Serial.println(sizeof(float));
Serial.print("double : "); Serial.println(sizeof(double));
// 변수들의 크기를 출력합니다:
Serial.println();
Serial.print("c_pins : "); Serial.println(sizeof(c_pins));
Serial.print("i_pins : "); Serial.println(sizeof(i_pins));
Serial.print("pins : "); Serial.println(pins);
Serial.print("f_numbers : "); Serial.println(sizeof(f_numbers));
Serial.print("numbers : "); Serial.println(numbers);
}
void loop() {
// 여기에 주 처리 부분을 넣어 주세요. 이것은 반복 실행됩니다.
}
실행 결과
=========
스케치를 업로드하고 시리얼 모니터 창을 열면 결과가 출력 되어 바로 확인할 수 있습니다.