c/c++ para sistemas operacionais professor: andré luis meneses silva e-mail/msn: alms@ufs.br...
Post on 16-Apr-2015
106 Views
Preview:
TRANSCRIPT
C/C++ para Sistemas Operacionais
Professor: André Luis Meneses SilvaE-mail/msn: alms@ufs.br
Página: www.dsi.ufs.br
Agenda
Introdução Compilando O método main Incluindo Arquivos Externos C/C++ e Java : Características Comuns Passagem de Parâmetros em Função Class/Struct Introdução ao uso de ponteiros Ponteiros para função Segunda Atividade
Introdução
Veremos um pouco de C/C++ para utilizar no decorrer da disciplina.
Lembrem-se que vocês já viram P1 e P2, a disciplina é S.O., não P3.
O conhecimento da linguagem será extremamente necessária para as atividades.
Lembrem-se que as atividades em dupla, valerão 30% da média final.
Histórico
C desenvolvida em 1972 por Dennis Ritchie para ser usada com o Unix.
Anos depois, Bjarne Stroustrup desenvolveu C++, o intuito era agregar O.O. a uma linguagem rápida e portável.
Vantagens e Usos
Vantagens Eficiência Portabilidade de Código Habilidade para acessar endereços específicos do
hardware. Demanda poucos recursos do Sistema.
Usos Sistemas Operacionais Aplicações Embarcadas Aplicativos
Compilando...
g++ [opções] [parâmetros] arquivos. Algumas [opções] úteis: -v (exibe detalhes de compilação). -o nome (Define o nome do arquivo de saída) -w (elimina as mensagens de alerta). -I/path (inclue as bibliotecas presentes no caminho
especificado). -l pthread (inclue bibliotecas específicas)
Primeiro Programa C
#include <stdio.h>void main(){printf(“Hello World\n”);}
Abram o pico ou vi. exemplo_hello_world.c
O método main
O método main é o ponto de execução de uma aplicação c++.
Existem várias formas de se definir um método main, mas a forma mais comum é a seguinte:
int main(int argc, char** argv){}
Onde: Argc representa a quantidade de argumentos passados como entrada
do programa Argv representa os argumentos passados como entrada do programa O valor de retorno inteiro, especificado pela função pode ser utilizado
para sinalizar se a função realizou ou não suas operações com sucesso.
exemplo_console;
Incluindo arquivos externos
Para incluirmos arquivos externos ao nosso projeto basta utilizarmos a diretiva #include seguido do nome do arquivo.
Devemos declarar #include no início de nosso programa. #include “arquivo.h”
Observa apenas o diretório corrente. #include <arquivo.h>
Observa as pastas especificadas através da diretiva -l (include)
Java e C/C++: Características Comuns
Os operadores aritméticos, lógicos, relacionais, binários e de atribuição são iguais aos de java.
Estruturas de controle (if e switch) possuem sintaxe igual a de Java.
Estruturas de repetição (for, while, do...while) possuem sintaxe igual a de Java.
Declaração de funções/métodos e variáveis possuem sintaxe igual a de Java.
Java e C/C++: Características Comuns
Por hoje é só pessoal, vocês já sabem tudo :-)
Java e C/C++: Características Comuns
exemplo_laco exemplo_funcao
Java e C/C++: Características Comuns
Tipos Primitivos Vocês já o conhecem de java. São eles:
int float double char //ascii boolean
Primitivos novos: void*
Menor unidade da linguagem, representa nenhum dado ou qualquer dado.
Passagem de parâmetros em função
Passagem por valor. Parâmetros sem utilizar nenhum operador especial Exemplo: int getData(int id, int Data);
Passagem por referência. Utiliza o operador & Exemplo: int getData(int& id, int& Data);
Passagem por ponteiro. Funciona igual a passagem por referência. int getData(int* id, int* Data);
exemplo_passagem_parametros
Struct e Classes
Struct Coleção de variáveis referenciadas por um nome,
fornecendo uma maneira conveniente de ter informações relacionadas e agrupadas.
Em C++ ele dá suporte a métodos. Todos os seus membros são public por padrão.
Classe Em C++ uma classe é um struct, cujos membros
são private por padrão..
Struct/Classe
Sintaxe
struct/class <identificador>{
public: | private: | protected: tipo <nome da variável>...tipo <nome do método>}
Introdução ao uso de ponteiros
Um ponteiro é um tipo de variável especial que armazena endereços de memória.
Através dele também podemos ter acesso ao conteúdo deste endereço.
Sintaxe de definição de um ponteiro em C++ <tipo>* <identificador>;
Exemplo: char* caractere; unsigned* number;
Introdução ao uso de ponteiros
Através de um ponteiro podemos: Apontar para variáveis ou objetos que declaramos
em nosso programa (através do operador &). Apontar para um elemento alocado dinamicamente
(através do operador new)
exemplo_ponteiro
Introdução ao uso de ponteiros
Para array a idéia é similar
int *vPtr = v;
int *vPtr = &v[ 0 ];
Introdução ao uso de ponteiros
Para acessarmos o conteúdo armazenado por um endereço apontado por um ponteiro, utilizamos o operador (*). No exemplo anterior, teríamos:
int andy = 25; int* tob = &andy; *tob // Recupera o valor 25.
Ponteiros void
Ponteiros convencionais só podem apontar para o tipo que especificamos para ele.
Os ponteiros void são ponteiros de propósito geral. Sintaxe:
void* p; // Define o ponteiro p do tipo void*. exemplo_void.
Ponteiros para funções
Em C também podemos criar ponteiro para funções.
A idéia é simples: Como tudo está em memória, um ponteiro para
função contém o endereço onde está declarada uma função.
Ponteiros para Funções
Declarando um ponteiro para função. Seja a seguinte função:
char* gets(char*); O ponteiro para a mesma é definido da seguinte
forma: char* (*p) (char*);
Cuidado com os parêntesis. Char** p (char*); // possue outro significado.
exemplo_ponteiro_funcao
Segunda Atividade
• Para Quinta-Feira (03/set).– Deseja-se implementar, um algoritmo de
ordenação genérico. Tal algoritmo realiza ordenação em ordem crescente e decrescente. O mesmo realiza ordenação de números e strings (lexográfica).
– Com essas informações:• Elaborem uma solução na qual eu tenho apenas
uma única função ordena resolve os 4 casos.• Ordena trabalha com um array de elementos e
devolve esse array ordenado.• Dica1* : Utilizar ponteiro para função.• Dica2*: Ordena pode receber outros
parâmetros.
Referências
The C Library Reference Guide http://www.acm.uiuc.edu/webmonkeys/book/c_guid
e/
top related