C语言extern关键字定义外部变量--Redis源码extern使用
生活随笔
收集整理的這篇文章主要介紹了
C语言extern关键字定义外部变量--Redis源码extern使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Redis2.8中有networking.c,這個文件沒有networking.h
networking.c首先引入redis.h這個頭文件
#include "redis.h"
在redis.c一開始就聲明了全局變量
/* Global vars */
struct redisServer server;
networking.c的createClient函數
redisClient *createClient(int fd) {redisClient *c = zmalloc(sizeof(redisClient));/* passing -1 as fd it is possible to create a non connected client.* This is useful since all the Redis commands needs to be executed* in the context of a client. When commands are executed in other* contexts (for instance a Lua script) we need a non connected client. */if (fd != -1) {anetNonBlock(NULL,fd);anetEnableTcpNoDelay(NULL,fd);if (server.tcpkeepalive)anetKeepAlive(NULL,fd,server.tcpkeepalive);if (aeCreateFileEvent(server.el,fd,AE_READABLE,readQueryFromClient, c) == AE_ERR){close(fd);zfree(c);return NULL;}}
這里之所以可以引用redisClient就是因為redisClient在redis.h是被聲明為 extern的,而networking.c已經引入redis.h這個頭文件
/*-----------------------------------------------------------------------------* Extern declarations*----------------------------------------------------------------------------*/extern struct redisServer server;
不然注釋掉extern struct redisServer server是編譯不過去的:
關于extern和頭文件的解釋:
出自《C語言入門經典(第四版)》
出自《21天學通C語言(第6版)》
出自《C語言編程:一本全面的C語言入門教程 (第3版)》
總結
以上是生活随笔為你收集整理的C语言extern关键字定义外部变量--Redis源码extern使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libcurl使用
- 下一篇: C语言的HashTable简单实现