如何在c中使用全局变量?
我已经阅读了墙上的文字,避免Globals。 这导致了一个明显的问题,如何做到最好?
我显然希望通过当前的项目来完成。 目标是让遥远的PC向已经有stdin阅读器的应用程序发送“击键”。 这个想法是让现有的代码检测到没有挂起的击键,然后检查是否有“udp keystroke”,如果是,填入它,因此它似乎是键盘输入。 微创,并不需要在其他人的代码中进行改装。
所以我修补了一个小型的UDP套接字阅读器,它使用setup()
函数打开和绑定端口,然后在使用非阻塞select()
的循环中使用service()
函数,无循环,只需检查是否有任何东西现在阅读。 如果是这样,请从套接字读取数据并对其执行一些操作,否则返回0。
// pseudo c
char c;
setup();
while (1)
{
c = check_for_keyboard_entry();
if ( c == 0 )
c = service();
handle_keypress( c );
do_a_bunch_of_other_stuff();
}
这样做的一个显而易见的方法是用几个全局变量来传递两个函数之间的端口,超时,sockaddr等等。 但是,你应该是狂热的,对吧?
那么在这些功能之间传输六个或八个变量的首选方法是什么?
如果我在setup()
使用静态变量,它们是否可以通过service()
例程访问?
我想一个被malloc编辑并传递的结构是可行的。 我应该有一个cleanup()
来关闭套接字并释放内存。
请记住,这是AC问题。 没有C ++!
您可以将所有这些信息打包到一个struct
。 该结构对客户端可见或不透明类型。 不透明类型可能是更好的选择,因此您可以隐藏复杂类型的数据(封装)。
typedef struct {
port_t port;
timeout_t timeout;
sockaddr_t sockaddr;
etc_t etc;
} my_stuff;
然后通过引用传递它:
void Foo(my_stuff*);
我想一个被malloc编辑并传递的结构是可行的。 我应该有一个清理()来关闭套接字并释放内存。
一般来说,一个结构并不总是需要malloc
。 但是,是的,这可能是需要的情况。