ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • int type을 bool type으로 활용하는 방안
    2013. 1. 18. 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언에서만 볼 수 있는 테크닉이랄까.



    반응형

    댓글

Designed by Tistory.