刚刚开始为Pebble应用程序开发 - 并且还回到了我已经多年未维护的基本C技能,我试图了解这些Pebble应用程序的基本结构。
我确实知道静态和非静态之间的区别,但如果有人能帮助解释在这种情况下对我的应用程序的影响,那将非常高兴。我在下面粘贴了最小化的示例代码,其中显示了Pebble应用程序在两种情况下的结构。
静态版
#include <pebble.h>
static Window *window;
static void handle_init(void) {
window = window_create();
window_stack_push(window, true);
}
static void handle_deinit(void) {
window_destroy(window);
}
int main(void) {
handle_init();
app_event_loop();
handle_deinit();
}
非静态版
#include <pebble.h>
Window *window;
void handle_init(void) {
window = window_create();
window_stack_push(window, true);
}
void handle_deinit(void) {
window_destroy(window);
}
int main(void) {
handle_init();
app_event_loop();
handle_deinit();
}
我的问题是:
使用非静态变量和静态变量及函数的含义是什么?
我试图在Pebble开发者网站上找到信息,但是静态和非静态的例子似乎没有太多的一致性使用,我找不到一个好的官方指南。
答案 0 :(得分:9)
它与链接和可见性有关。简而言之,标记为static
的全局符号不会从其定义的translation unit(源文件)中导出。这意味着如果项目中有多个源文件,那么在一个文件中声明一个全局变量或函数static
,该变量或函数不能从任何其他源文件中“看到”或使用。
这是(或应该是)基本的C知识,与Pebble无关。