ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • int type을 bool type으로 활용하는 방안
    2013. 1. 18. 0 comments

    C언에서 !을 사용하게 되면, 0이 아닌 숫자의 경우에 대해서 0으로 변경하고 0인 경우에는 1로 값을 변화시켜준다. !을 한번만 사용하게 되면 자연스럽게 0 or 1의 값을 갖게 되고 !!을 하게 되면 최초 0일 경우에는 0으로 그리고 0이 아닌 값인 경우에는 1로 값이 변환되게 된다.


    즉, bool type처럼 0 or 1의 값으로 활용 가능하다.

    int i = 12345;
    printf("%d\n", !i);
    printf("%d\n", !!i);
    


    출력

    0

    1



    위의 내용들이 사실 필요할까 싶지만 다음의 linux kernel에서의 일부 코드를 살펴보면,

    static int ethtool_get_one_feature(struct net_device *dev,
      char __user *useraddr, u32 ethcmd)
    {
      netdev_features_t mask = ethtool_get_feature_mask(ethcmd);
      struct ethtool_value edata = {
        .cmd = ethcmd,
        .data = !!(dev->features & mask),
      };
    
      if (copy_to_user(useraddr, &edata, sizeof(edata)))
        return -EFAULT;
      return 0;
    }
    

    ethcmd을 넘겨주고 관련 설정이 on|off 되어 있는지를 확인할 수 있는 함수이다. 여러가지 설정값을 저장하고 있는 dev->features에 mask를 비트 연산한 결과 값에 대해서 !!을 하여서 0 or 1의 값을 저장한다. 넘어온 값도 의미있게 사용하고 그 값에 따른 설정 데이터가 있는지 on|off 를 !!를 사용해서 저장할 수 있다. C언에서만 볼 수 있는 테크닉이랄까.



    반응형

    댓글 0

Designed by Tistory.