[問題] void* 轉型成 非指標型態

作者: anoymouse (沒有暱稱)   2022-04-28 10:38:19
Linux ubuntu WSL
GCC
簡化過的程式:
bool app_usb_activity(void *extra_data)
{
case Mic:
{
uint8_t* target_level = (uint8_t*)extra_data;
break;
}
case Audio:
{
uint32_t event = (uint32_t) extra_data;
break;
}
}
所以void * 可以轉成非指標類型的變數的意思?
作者: nh60211as   2022-04-28 10:53:00
C 才能把指標轉成數值,C++ 要加 -fpermissive而且如果指標是 64-bit 的話呼叫者還要知道函式轉換的行為是什麼
作者: anoymouse (沒有暱稱)   2022-04-28 11:37:00
的確是C,只限數值對不對?
作者: nh60211as   2022-04-28 16:50:00
欸,我不知道除了轉型成指標跟數值你還會想轉成什麼
作者: chuegou (chuegou)   2022-04-29 00:10:00
我猜猜 enum或structure?
作者: anoymouse (沒有暱稱)   2022-04-29 07:56:00
對啊 會很奇怪 就問問看
作者: tinlans ( )   2022-04-29 09:03:00
C++ 用 reinterpret_cast<> 轉,不用開 -fpermissive。這 C API 典型的用法之一,傳的人不想去 heap 上配一塊就直接轉型傳,翻 pthread_create() 的範例很容易找到。
作者: bachelorwhc (單身老王)   2022-04-29 09:47:00
這樣寫不是不能理解就是 32bit以上結果都會對
作者: OnlyRD (里巷人)   2022-05-15 20:21:00
當然可以啊,c++也可以,但是c++需要你確定呼叫強制轉型,上面留言有寫懶得打字。

Links booklink

Contact Us: admin [ a t ] ucptt.com