C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: [email protected]...

25
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: [email protected] Página: www.dsi.ufs.br

Transcript of C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: [email protected]...

Page 1: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

C/C++ para Sistemas Operacionais

Professor: André Luis Meneses SilvaE-mail/msn: [email protected]

Página: www.dsi.ufs.br

Page 2: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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

Page 3: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 4: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 5: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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

Page 6: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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)

Page 7: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Primeiro Programa C

#include <stdio.h>void main(){printf(“Hello World\n”);}

Abram o pico ou vi. exemplo_hello_world.c

Page 8: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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;

Page 9: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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)

Page 10: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 11: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Java e C/C++: Características Comuns

Por hoje é só pessoal, vocês já sabem tudo :-)

Page 12: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Java e C/C++: Características Comuns

exemplo_laco exemplo_funcao

Page 13: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 14: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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

Page 15: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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..

Page 16: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Struct/Classe

Sintaxe

struct/class <identificador>{

public: | private: | protected: tipo <nome da variável>...tipo <nome do método>}

Page 17: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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;

Page 18: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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

Page 19: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Introdução ao uso de ponteiros

Para array a idéia é similar

int *vPtr = v;

int *vPtr = &v[ 0 ];

Page 20: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 21: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 22: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 23: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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

Page 24: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

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.

Page 25: C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva E-mail/msn: alms@ufs.br Página: .

Referências

The C Library Reference Guide http://www.acm.uiuc.edu/webmonkeys/book/c_guid

e/