Seria muito bom que declarassemos esta variavel como sendo volatile.Especificadores de Classe de Armazenamento87Estes modificadores de tipo atuam sobre a maneira com a qual o compilador vaiarmazenar a variavel.autoO especificador de classe de armazenamento auto define variaveis automaticas, isto e,variaveis locais. Raramente usado pois todas as variaveis locais do C sao auto por definicao.externO extern define variaveis que serao usadas em um arquivo apesar de terem sidodeclaradas em outro. Ao contrario dos programas ate aqui vistos, podemos ter programas devarios milhares de linhas. Estes podem ser divididos em varios arquivos (modulos) que seraocompilados separadamente. Digamos que para um programa grande tenhamos duas variaveisglobais: um inteiro count e um float sum. Estas variaveis sao declaradas normalmente emum dos modulos do programa. Por exemplo:int count;float sum;main (void){...return 0;}Num outro modulo do programa temos uma rotina que deve usar as variaveis globaisacima. Digamos que a rotina que queremos se chama RetornaCount() e retorna o valor atualde count. O problema e que este modulo sera compilado em separado e nao tomaraconhecimento dos outros modulos. O que fazer? Sera que funcionaria se fizermos assim:int count; /* errado */float sum;int RetornaCount (void){return count;}Nao. O modulo compilaria sem problema, mas, na hora que fizermos a linkagem (uniaodos modulos ja compilados para gerar o executavel) vamos nos deparar com uma mensagemde erro dizendo que as variaveis globais count e sum foram declaradas mais de uma vez. Amaneira correta de se escrever o modulo com a funcao RetornaCount() e:extern int count; /* certo */extern float sum;int RetornaCount (void){return count;}Assim, o compilador ira saber que count e sum estao sendo usados no bloco mas queforam declarados em outro.staticO funcionamento das variaveis declaradas como static depende se estas sao globais oulocais.Variaveis globais static funcionam como variaveis globais dentro de um modulo, ou seja,sao variaveis globais que nao sao (e nem podem ser) conhecidas em outros modulos. Isto e88util se quisermos isolar pedacos de um programa para evitar mudancas acidentais em variaveisglobais.Variaveis locais static sao variaveis cujo valor e mantido de uma chamada da funcaopara a outra. Veja o exemplo:int count (void){static int num=0;num++;return num;}A funcao count() retorna o numero de vezes que ela ja foi chamada. Veja que a variavellocal int e inicializada. Esta inicializacao so vale para a primeira vez que a funcao e chamadapois num deve manter o seu valor de uma chamada para a outra. O que a funcao faz eincrementar num a cada chamada e retornar o seu valor. A melhor maneira de se entenderesta variavel local static e implementando. Veja por si mesmo, executando seu proprioprograma que use este conceito.registerO computador tem a memoria principal e os registradores da CPU. As variaveis (assimcomo o programa como um todo) sao armazenados na memoria. O modificador register diz aocompilador que a variavel em questao deve ser, se possivel, usada em um registrador da CPU.Vamos agora ressaltar varios pontos importantes. Em primeiro lugar, porque usar oregister? Variaveis nos registradores da CPU vao ser acessadas em um tempo muito menorpois os registradores sao muito mais rapidos que a memoria. Em segundo lugar, em que tipode variavel usar o register? O register nao