簡體   English   中英

如何在啟用ARC的情況下將Objective-C代碼轉換為C ++

[英]How to translate Objective-C code to C++ with ARC enabling

一個與Objective-C塊相關的博客說:啟用ARC時,以下代碼:

typedef int (^blk_t)(int);
blk_t func(int rate)
{
    return ^(int count){return rate * count;};
}

可以使用clang的-rewrite-objc轉換為以下C ++代碼:

blk_t func(int rate)
{
    blk_t tmp = &__func_block_impl_0(__func_block_func_0, &__func_block_desc_0_DATA, rate);
    tmp = objc_retainBlock(tmp);
    return objc_autoreleaseReturnValue(tmp); 
}

我嘗試通過以下方式進行翻譯,但沒有成功。

  1. clang -rewrite-objc test.m- >此命令可以將test.m轉換為cpp代碼。 但是我看不到objc_retainBlock和objc_autoreleaseReturnValue的調用。
  2. clang -rewrite-objc -fobjc-arc test.m- >該命令將失敗,並顯示“錯誤:當前部署目標不支持自動__weak引用”。 結果,不會生成cpp代碼。
  3. clang -rewrite-objc -fobjc-arc -mmacosx-version-min = 10.11 test.m ,其行為與#2相同。

問題:如何使用clang的-rewrite-objc選項將啟用ARC的Objective-C代碼轉換為cpp?

最后,我找到了缺少的clang選項:-fobjc-runtime; 指定objc運行時版本后,重寫將起作用。 例如以下命令:

clang -x objective-c -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.1.sdk -rewrite-objc -fobjc-arc -fblocks -mmacosx-version-min=10.11  -fobjc-runtime=macosx-10.11 -O0  test.m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM