This site is a testing version, but all data is shared with the live forum.


Raised This Month: $ Target: $400
 0% 

[TUT] The Use of Static Variables


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Hawk552
AMX Mod X Moderator
Join Date: Aug 2005
Old 06-26-2006 , 09:10   [TUT] The Use of Static Variables
Reply With Quote #1

What is a static variable? It is basically a global variable that can only be accessed by the function it is declared in.

This means that:

Code:
#include <amxmodx> #include <amxmisc> public plugin_init() {     register_plugin("The Internet","Has","Spoken")         fnDoFunc()     iNum = 2 } fnDoFunc() {     static iNum     iNum = 1 }

Is NOT valid. Why? Because the static variable was declared in fnDoFunc, not plugin_init.

The example above does not exemplify the true power of static variables. If you're just going to zero it before you use it, use the operator "new". Declaring a new variable is not an expensive operation, simply the zeroing of it is.

But what can a static variable do?

Here's an example of the usage of a static variable vs. a new variable:

Static
Code:
#include <amxmodx> #include <amxmisc> public plugin_init()     register_plugin("The Internet","Has","Spoken") public client_connect(id) {     static szName[33]         get_user_name(id,szName,32)     client_print(0,print_chat,"the matrix has %s",szName) }

New

Code:
#include <amxmodx> #include <amxmisc> public plugin_init()     register_plugin("The Internet","Has","Spoken") public client_connect(id) {     new szName[33]     get_user_name(id,szName,32)     client_print(0,print_chat,"the matrix has %s",szName) }

But why is the static version faster? Because the memory isn't created every single time it's needed, rather it's left there, kind of like a global variable never loses its value ever after being used in a function.

So for example, take in this hypothetical sequence of events in a server:

Static
Code:
  static variable initialized
  
  Hawk552 joins server
  client_connect called
  static variable already exists
  get name
  print name
  
  *5 minutes later*
  
  zomg joins server
  client_connect called
  static variable already exists with contents "Hawk552\0..."
  get name -> now looks like "zomg\052\0...", however it ends at the first \0 so the trailing 52 doesn't matter
  print name
New
Code:
  Hawk552 joins server
   client_connect called
  new variable initialized
   get name
   print name
  
  *5 minutes later*
  
  zomg joins server
    client_connect called
   new variable initialized
    get name
    print name
And that is basically why static variables are useful.
__________________

Last edited by Hawk552; 06-30-2006 at 10:32. Reason: merged in... oh hello pm
Hawk552 is offline
Send a message via AIM to Hawk552
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:04.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode