HY150Ξενοφών Ζαμπούλης HY150 Ε π ι π λέον στοιχεία της C
HY150 Ξενοφών Ζαμπούλης 2 Πρόγραμμα σε Διαφορετικά Αρχεία Οργανώνουμε καλύτερα τον κώδικα Χρήσιμα σε μεγάλα π ρογράμματα – Παράδειγμα (human tracking) Linker, - Ι header files – #include “myheader.h” extern – extern void myfunction();
HY150 Ξενοφών Ζαμπούλης 3 header files – Παράδειγμα - “myAlloc.h” #include #define Pi //Orismos Domwn typedef struct Level { int level; struct List *head; struct List *tail; struct Level *next; } Level; typedef struct List { float **image; int l,c; struct List *next; } List; //Orismos global metablhtwn int globalVariable; //prototypes sunarthsewn void **Alloc2D(int dimx, int dimx_bytes, int dimy, int dimy_bytes); int **FreeInt(int **I, int dimx); Level *AllocTree(int depth, int l, int c); Level *FreeTree(Level *root);
HY150 Ξενοφών Ζαμπούλης 4 Ορίσματα στη γραμμή εντολής int main(int argc, char *argv[]) { int number; if (argc != 2) { printf(“Usage:%s number\n”,argv[0]); exit(0); } number = atoi(argv[1]); … } int main(int argc, char *argv[]) argc: # Ορισμάτων argv: Ορίσματα Παράδειγμα > a.out test.txt //argc = 4 //argv[0] = “a.out” //argv[1] = “10” //argv[2] = “20” //argv[3] = “test.txt”
HY150 Ξενοφών Ζαμπούλης 5 Ορίσματα στη γραμμή εντολής int main(int argc, char *argv[], char *env[]) { int count = 0; for (count = 0; env[count] != 0; count++ ) printf("%s\n",env[count]); } NULL terminated array
HY150 Ξενοφών Ζαμπούλης 6 env[0] : ALLUSERSPROFILE=C:\Documents and Settings\All Users env[1] : APPDATA=C:\Documents and Settings\founder\Application Data env[2] : CLASS_HOME=D:\Program Files\Java\jdk1.6.0_02\lib\dt.jar;.;D:\Program Files\Java\jdk1.6.0_02\lib env[3] : CommonProgramFiles=C:\Program Files\Common Files env[4] : COMPUTERNAME=LUOSIYONG env[5] : ComSpec=C:\WINDOWS\system32\cmd.exe env[6] : FP_NO_HOST_CHECK=NO env[7] : HOMEDRIVE=C: env[8] : HOMEPATH=\Documents and Settings\founder env[9] : JAVA_HOME=D:\Program Files\Java\jdk1.6.0_02 env[10] : LOGONSERVER=\\LUOSIYONG env[11] : NUMBER_OF_PROCESSORS=1 env[12] : OS=Windows_NT env[13] : Path=C:\windows\system32;D:\Program Files\Java\jdk1.6.0_02\bin;D:\xampp\mysql\bin env[14] : PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH env[15] : PROCESSOR_ARCHITECTURE=x86 env[16] : PROCESSOR_IDENTIFIER=x86 Family 15 Model 47 Stepping 2, AuthenticAMD env[17] : PROCESSOR_LEVEL=15 env[18] : PROCESSOR_REVISION=2f02 env[19] : ProgramFiles=C:\Program Files env[20] : PROMPT=$P$G env[21] : SESSIONNAME=Console env[22] : SystemDrive=C: env[23] : SystemRoot=C:\WINDOWS env[24] : TEMP=C:\DOCUME~1\founder\LOCALS~1\Temp env[25] : TMP=C:\DOCUME~1\founder\LOCALS~1\Temp env[26] : USERDOMAIN=LUOSIYONG env[27] : USERNAME=founder env[28] : USERPROFILE=C:\Documents and Settings\founder env[29] : VS90COMNTOOLS=D:\Program Files\VS2008\Common7\Tools\ env[30] : windir=C:\WINDOWS
HY150 Ξενοφών Ζαμπούλης 7 Χειρισμός Bits Οι τελεστές των bits εφαρμόζονται σε κάθε bit των ακεραίων τιμών και είναι : ~ ( ΣΥΜΠΛΗΡΩΜΑ ) ~1 = 0 ~0 = 1 – ~( ) = ( ) & (AND) 0 & 1 = 0 1 & 1 = 1 – ( ) & ( ) = ( ) | (OR) 0 | 1 = 1 0 | 0 = 0 – ( ) | ( ) = ( ) ^ (XOR) 1 ^ 1 = 0 1 ^ 0 = 1 – ( ) ^ ( ) = ( )
HY150 Ξενοφών Ζαμπούλης 8 Χειρισμός Bits Τελεστές ολίσθησης > – x << y ολισθαίνει το αριστερά κατά y θέσεις bit Τα νέα bits είναι 0 ( ) << 2 = ( ) int a = 1; int b; b = a << 2; /* assigns 4 to b */ a <<= 2; /* changes a to 4 */
HY150 Ξενοφών Ζαμπούλης 9 Χειρισμός Bits Τελεστές ολίσθησης > – x >> y ολισθαίνει το δεξιά κατά y θέσεις bit Αν το x είναι unsigned, τα νέα bits είναι 0 Αλλιώς, τα νέα bits διατηρούν το π ρόσημο ( ανάλογα με την αρχιτεκτονική της μηχανής ) ( ) >> 2 = ( ) (unsigned) ( ) >> 2 = ( ) (signed – sign extension)
HY150 Ξενοφών Ζαμπούλης 10 #define ANIM_LOOP 1 // ( ) #define ANIM_ONCE 2 // ( ) #define ANIM_MAXSPEED 4 // ( ) #define ANIM_MINSPEED 8 // ( ) #define ANIM_CUSTSPEED 16 // ( ) #define ANIM_LINK 32 // ( ) #define ANIM_LINKALL 64 // ( )
HY150 Ξενοφών Ζαμπούλης 11 Testing a bit Problem: given int i, is bit n set (equal to 1)? How can we test if this bit is 1? We can use & operator with a "mask" variable: mask if (i & mask) printf ("yes"); else printf ("no");
HY150 Ξενοφών Ζαμπούλης 12 Toggling a bit and leaving all other bits unchanged x = x ^ mask; (or shorthand x ^= mask;) Bits that are set to 1 in the mask will be toggled in x. Bits that are set to 0 in the mask will be unchanged in x. Toggling means that if the bit is 1, it is set to 0, and if the bit is 0, it is set to 1. XOR truth table 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0
HY150 Ξενοφών Ζαμπούλης 13 Setting a bit to zero and leaving all other bits unchanged x = x & mask; (or x &= mask;) Bits that are set to 1 in the mask will be unchanged in x. Bits that are set to 0 in the mask will be set to zero in x. AND truth table 0 & 0 = 0 1 & 0 = 0 0 & 1 = 0 1 & 1 = 1
HY150 Ξενοφών Ζαμπούλης 14 Setting a bit to one and leaving all other bits unchanged x = x | mask; (or x |= mask;) Bits that are set to 1 in the mask will be set to one in x. Bits that are set to 0 in the mask will be unchanged in x. OR truth table 0 | 0 = 0 1 | 0 = 1 0 | 1 = 1 1 | 1 = 1