可能重复:
`extern`关键字对C函数的影响
好的,现在几个小时我已经阅读了很多关于extern关键字的含义.还有最后一件事让我无所事事,我无法找到任何相关信息.据我所知,extern关键字基本上告诉编译器变量或函数只是一个声明,并且它是在某处定义的,因此它不必担心,链接器将处理它.
输入以下内容时编译器生成的警告(我正在使用gcc 4.2.1):
extern int var = 10;
Run Code Online (Sandbox Code Playgroud)
支持这个.有了extern这应该是唯一的,因此是不正确的声明.
然而,令我困惑的是在键入此内容时没有警告或任何内容:
extern int func() {return 5;}
Run Code Online (Sandbox Code Playgroud)
这是一个定义,它应该生成相同的警告,但事实并非如此.我在这里找到的唯一解释是该定义覆盖了extern关键字.但是,遵循该逻辑,为什么它不是在变量定义时覆盖它?或者当与变量一起使用时,关键字是否具有特殊含义?
如果有人向我解释,我将非常感激.谢谢!
我有一个 SDK,我想为其添加 SPM 支持。该 SDK 可以针对 iOS 和 macOS 进行编译。大多数源文件对于两个平台都是通用的,但它有一些处理 UI 的特定于平台的源文件和几个针对 macOS 目标的 xib 文件。我#if canImport(...)在源文件中使用仅针对其预期平台编译文件。但我找不到从 iOS 版本的 SDK 中排除 .xib 文件的方法。我无法在.target(...)声明中排除它们,因为那样我就会在两个平台上排除它们。我无法为每个平台制定单独的目标。
知道目前这是否可能吗?
我正在尝试使用网络视图构建一个简单的MacOS应用程序。我正在使用WKWebView并且没有明显的原因,webViewWebContentProcessDidTerminate()在初始化Web视图后立即调用该方法,而没有Web视图,甚至尝试加载任何内容。经过数小时的浏览文档和在线问题,我无法弄清楚为什么会发生这种情况以及如何防止这种情况发生。在线建议的唯一一件事是在发生这种情况时重新加载Web视图,这将导致稍后再次调用该方法,以此类推。我现在使用以下源代码浏览一个完全空白的MacOS应用程序:
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var webView: WKWebView!
func applicationDidFinishLaunching(_ aNotification: Notification) {
webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
webView.navigationDelegate = self
}
}
extension AppDelegate: WKNavigationDelegate {
func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
print("web view process did terminate")
webView.reload()
}
}
Run Code Online (Sandbox Code Playgroud)
Web视图是否在视图层次结构中,是否具有非零框架以及通常是否可见均无关紧要。我还启用了任意负载,只是为了尝试所有内容。
我真的很感谢这方面的帮助。我正在针对10.13 SDK进行编译,并在MacOS 10.12上运行。
谢谢。