alta ordemlong int int Os 16 bits de mais alta ordemfloat int Precisao - resultado arredondadodouble float Precisao - resultado arredondadolong double double Precisao - resultado arredondadoModificadores de FuncoesA forma geral de uma funcao e, como ja foi visto,tipo_de_retorno nome_da_funcao (declaracao_de_parametros){corpo_da_funcao}Uma funcao pode aceitar um modificador de tipo. Este vai modificar o modo como afuncao opera na passagem de parametros. A forma geral da funcao ficaria entao:modificador_de_tipo tipo_de_retorno nome_da_funcao (declaracao_de_parametros){corpo_da_funcao}O nosso curso nao aborda detalhes do funcionamento interno de funcoes. Para sabermais, consulte o manual do seu compilador ou algum livro especializado.pascalFaz com que a funcao use a convencao de funcoes da linguagem de programacao Pascal.Isto faz com que as funcoes sejam compativeis com programas em Pascal.cdeclO modificador de tipo cdecl faz com que a funcao use a convencao para funcoes do C.Raramente e usado pois e o default. Pode-se pensar no cdecl como sendo o "inverso" dopascal.interruptDiz ao compilador que a funcao em questao sera usada como um manipulador deinterrupcoes. Isto faz com que o compilador preserve os registradores da CPU antes e depoisda chamada a funcao. Mais uma vez este topico esta fora do escopo do curso.Ponteiros para FuncoesO C permite que acessemos variaveis e funcoes atraves de ponteiros! Podemos entaofazer coisas como, por exemplo, passar uma funcao como argumento para outra funcao. Umponteiro para uma funcao tem a seguinte declaracao:tipo_de_retorno (*nome_do_ponteiro)();outipo_de_retorno (*nome_do_ponteiro)(declaracao_de_parametros);Repare nos parenteses que devem ser colocados obrigatoriamente. Se declaramos:tipo_de_retorno * nome(declaracao_de_parametros);Estariamos, na realidade, declarando uma funcao que retornaria um ponteiro para o tipoespecificado.91Porem, nao e obrigatorio se declarar os parametros da funcao. Veja um exemplo do usode ponteiros para funcoes:#include <stdio.h>#include <string.h>void PrintString (char *str, int (*func)(const char *));main (void){char String [20]="Curso de C.";int (*p)(const char *); /* Declaracao do ponteiro para funcaoFuncao apontada e inteira e recebe como parametrouma string constante */p=puts; /* O ponteiro p passa a apontar para a funcao putsque tem o seguinte prototipo: int puts(const char *) */PrintString (String, p); /* O ponteiro e passado como parametro para PrintString*/return 0;}void PrintString (char *str, int (*func)(const char *)){(*func)(str); /* chamada a funcao atraves do ponteiro para funcao */func(str); /* maneira tambem valida de se fazer a chamada a funcao putsatraves do ponteiro para funcao func */}Veja que fizemos a atribuicao de puts a p simplesmente usando:p = puts;Disto, concluimos que o nome de uma funcao (sem os parenteses) e, na realidade, oendereco daquela funcao! Note, tambem, as duas formas alternativas de se chamar umafuncao atraves de um ponteiro. No programa acima, fizemos esta chamada por:(*func)(str);efunc(str);Estas formas sao equivalentes entre si.Alem disto, no programa, a funcao PrintString() usa uma funcao qualquer func paraimprimir a string na tela. O programador pode entao fornecer nao so a string mas tambem afuncao que sera usada para imprimi-la. No main() vemos como podemos atribuir, ao ponteiropara funcoes p, o endereco da funcao puts() do C.Em sintese, ao declarar um ponteiro para funcao, podemos atribuir a este ponteiro oendereco de uma funcao e podemos tambem chamar a funcao apontada atraves dele. Naopodemos fazer algumas coisas que faziamos com ponteiros "normais", como, por exemplo,incrementar ou decrementar um ponteiro para funcao.Alocacao