Escreva uma declaração para cada um dos seguintes itens:
a) Inteiro count que deve ser mantido em um registrador. Inicialize count em 0.
b) Variável de ponto flutuante lastVal que deve reter seu valor entre as chamadas para a função em que é definida.
c) Inteiro externo number cujo escopo deve ser restringido ao restante do arquivo em que está definido.
Passo 1
FALAAAAA, PROGRAMADOR(A)!
Nesse exercício de C, você PRECISA saber o que são classes de armazenamento e suas classificações! E você já vai entender o porquê de eu estar te dizendo isso...
Nomes de variáveis, de funções, dentre outras coisas, podem ser chamadas de identificadores.
Um identificador tem várias “características”, como seu nome, seu tipo, etc. Uma delas é a classe de armazenamento (que, por sua vez, determina quanto tempo o identificador permanece na memória, o lugar onde ele pode ser chamado no programa, se é conhecido por um ou mais arquivos-fontes...).
Para esse exercício, precisamos conhecer dois tipos de classes, que são diferenciadas de acordo com a duração de armazenamento: a register e a static.
A register é para declaração de variáveis com duração de armazenamento automático, ou seja, que surgem quando o bloco em que foram declaradas é executado e são destruídas ao fim do bloco. Variáveis automáticas são muito comuns como parâmetros de funções, por exemplo. Mas quando utilizamos a register, dizemos ao compilador para armazenar aquela variável em um registrador da CPU, fazendo com que possa ser acessada mais rapidamente. Note que o armazenamento automático é somente para variáveis!
Já a static é para declarar variáveis locais com duração de armazenamento estático, ou seja, que começam no início do programa. Elas são conhecidas na função em que foram declaradas, mas note que, se eu chamar a função de novo, a minha variável terá o mesmo valor que tinha da última vez que usei a função!
Show, né?

De forma resumida:
Eu uso a register quando quero que minha variável de armazenamento automático seja registrada na CPU e uso a static quando quero que minha variável local de armazenamento estático tenha seu valor “retido”.
Lembrando que a sintaxe é:
Classe tipo nome (inicialização);
Agora que você conhece essas duas classes, vamos para a questão?
Passo 2
a) O trecho “mantido em um registrador” já entrega: a classe dessa variável é register! Nesse caso, o tipo da variável é int (inteiro), seu nome é count e deve ser inicializada com 0:
register int count = 0;
Passo 3
b) Talvez esse seja mais difícil de identificar. Mas, observe que ele pede que “deve reter seu valor”. Isso é característica da classe static. O tipo, já que se solicita um ponto flutuante, é float, e o nome é lastVal. A variável não deve ser inicializada:
static float lastVal;
Passo 4
c) Aqui, precisamos de uma informação extra: se queremos que o escopo da nossa variável se restrinja a um mesmo arquivo, utilizaremos a static. Caso contrário, usaríamos a extern. Nesse caso, o tipo da variável é int (inteiro) e o nome é number:
static int number;
Resposta
a) register int count = 0;
b) static float lastVal;
c) static int number;