-
[리눅스] - !!${변수} 의미Linux 2023. 8. 3. 02:23
커널 코드를 보다 보면 `!!${변수}`로 된 코드를 간혹 볼 수 있다.
일단 결론부터 말하면 저건 Bool 타입으로 사용하겠다는 의미이다.
long l1 = 132; long l2 = -1232; long l3 = 0; printf("l1: %d, l2: %d, l3:%d\n", !!l1, !!l2, !!l3); int i1 = 132; int i2 = -1232; int i3 = 0; printf("i1: %d, i2: %d, i3:%d\n", !!i1, !!i2, !!i3); short s1 = 8938; short s2 = -22132; short s3 = 0; printf("s1: %d, s2: %d, s3:%d\n", !!s1, !!s2, !!s3); char c1 = 89; char c2 = -122; char c3 = 0; printf("c1: %d, c2: %d, c3:%d\n", !!c1, !!c2, !!c3); unsigned int ui1 = 92732743; unsigned int ui2 = 0; printf("ui1: %d, ui2: %d\n", !!ui1, !!ui2); unsigned char uc1 = 213; unsigned char uc2 = 0; printf("uc1: %d, uc2: %d\n", !!uc1, !!uc2); unsigned short us1 = 213; unsigned short us2 = 0; printf("us1: %d, us2: %d\n", !!uc1, !!uc2); float f1 = 4937.23423f; float f2 = -9937.2023f; float f3 = 0.0f; printf("f1: %d, f2: %d, f3: %d\n", !!f1, !!f2, !!f3); double d1 = 4937.23423; double d2 = -9937.2023; double d3 = 0.0; printf("d1: %d, d2: %d, d3: %d\n", !!d1, !!d2, !!d3); struct temp *p1 = NULL; struct temp *p2 = malloc(sizeof(struct temp)); printf("p1: %d, p2: %d\n", !!p1, !!p2);
위의 코드의 결과값은 어떨까?
l1: 1, l2: 1, l3:0 i1: 1, i2: 1, i3:0 s1: 1, s2: 1, s3:0 c1: 1, c2: 1, c3:0 ui1: 1, ui2: 0 uc1: 1, uc2: 0 us1: 1, us2: 0 f1: 1, f2: 1, f3: 0 d1: 1, d2: 1, d3: 0 p1: 0, p2: 1
포인터든 그냥 자료형이든 상관없이 Bool Type으로 만들어준다.
'Linux' 카테고리의 다른 글
[리눅스] boot process overview (0) 2023.08.03 [리눅스] 루프백 디바이스(/dev/loopXX) (0) 2023.04.25