我想用更多的C語言而不是ObjC和Swift撰寫一個MacOS應用程式。我首先創建了一個main.c檔案,其中有main函式。接下來是在main函式中呼叫NSApplicationMain。這是在 AppKit 中定義的。然而,當我從main.c嘗試#include <AppKit/AppKit.h>時,我得到一個Could not build module 'AppKit'錯誤。我通過以下方式規避了這一問題:
extern int NSApplicationMain(int argc, const char * _Nonnull *argv)。
這就成功了。我的問題是,顯然NSApplicationMain可以從C語言中呼叫,為什么我必須直接extern它而不是直接包括AppKit.h?為什么他們不讓你以正確的方式包括它而不是自己宣告NSApplicationMain?我是不是不應該這樣做?
為什么你不能這樣做:
#include <stdio.h>
#include <AppKit/AppKit.h>/span>
int main(int argc, const char *argv[]) {
return NSApplicationMain(argc, argv)。
}
但是你可以這樣做:
#include <stdio.h>
extern int NSApplicationMain(int argc, const char * _Nonnull *argv)。
int main(int argc, const char *argv[]) {
return NSApplicationMain(argc, argv)。
}
uj5u.com熱心網友回復:
簡而言之,它不是標準的C頭檔案,盡管它有.h擴展名。注意,即使在Objective-C的.m檔案中,AppKit.h也必須被匯入,而不是被包含
#import <AppKit/AppKit.h>
uj5u.com熱心網友回復:
我不是這方面的權威,但我的看法是。AppKit是一個Objective-C框架。 因此,它有一個用Objective-C撰寫的頭檔案,而這個頭檔案不能包含在C語言中。當你用C語言宣告一個AppKit函式并呼叫它時,你基本上是依靠ABI這一事實--暫存器的內部呼叫約定、堆疊使用等。- 但從技術上講,你是在從C語言中呼叫一個Objective-C函式。 如果你真的想這樣做,你可以把你的C源檔案變成一個.m(Objective-C)檔案,但只限于純C語言的功能。 這將讓你包括頭檔案,同時讓你寫 "C "代碼(實際上是Objective-C,僅限于C語言的子集)。 對我來說,這似乎是一個很好的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/320050.html
標籤:
