Formatação de saída Muitos alunos queixam-se de que os fluxos C são difíceis de usar para o resultado, quando comparados aos métodos C mais antigos. Minha teoria é que, se a situação fosse revertida e os alunos fossem obrigados a passar da formatação do fluxo C para os métodos antigos, as queixas seriam mais altas. A maior vantagem única para os métodos de fluxo é que eles são de tipo seguro. Se você alterar um tipo de variável, as operações de fluxo subseqüentes usando essa variável aceitarão automaticamente a alteração ou indicarão uma incompatibilidade no tempo de compilação. No código C mais antigo, qualquer número de erros difíceis de detectar resultam de especificar incorretamente um tipo de variável ou alterar o tipo de variáveis e não lembrar todos os locais onde os especificadores precisam ser alterados. Lembre-se de que esta é uma introdução muito básica. Como este tutorial inteiro, esta página não é um guia abrangente para transmitir formatação. Basta responder as questões mais comuns de alunos. Um livro de texto de qualidade deve ser adquirido para atender às necessidades mais gerais. Definir a largura do campo é muito simples. Para cada variável, basta precedê-la com setw (n). Assim: observe como o setw (n) controla a largura do campo, então cada número é impresso dentro de um campo que permanece na mesma largura, independentemente da largura do próprio número. 2. Justificação no campo Agora que você selecionou um campo, você pode querer decidir qual lado desse campo ocupar. Como você pode imaginar, as escolhas são esquerda e direita. Aqui está um exemplo de mudar a justificação linha a linha: porque os números são, por padrão, justificados à direita, neste caso, eu só preciso definir e desarmar o sinalizador ios :: left. Em outras situações, você pode querer usar ios :: direito em um código semelhante a este. Infelizmente, existem duas bandeiras, ios :: left e ios :: right. Isso leva a uma confusão óbvia sobre qual bandeira está ativa. Em alguns casos ambíguos, você pode ter que fazer isso: 3. Controlando Precisão Precisão neste contexto significa o número de casas decimais em uma variável de ponto flutuante. Compile e execute o seguinte programa: Este programa não foi quebrado, você pediu dois lugares, ele imprimiu dois lugares. Se, em vez disso, quiser duas casas decimais (posições à direita do ponto decimal), você deve primeiro escolher o formato do ponto fixo. Como este: Este é um problema de estudante muito comum, o comportamento padrão do fluxo C para setprecision (n) é aplicar a especificação ao número inteiro, e não à parte fracionada. Se não for o que deseja, defina primeiro o formato do ponto fixo. Há algo muito importante para saber sobre setprecision (n). Se você escolher uma precisão dessa maneira, o número exibido será arredondado adequadamente. Experimente com o seguinte programa: O resultado (.6667) é uma representação apropriada de quatro dígitos da fração decimal repetitiva 2 3. Se você não deseja esse comportamento, você precisará pensar em um método diferente para exibição. Na maioria dos casos, o comportamento padrão é o correto. 4. Leeros de zeros As classes de fluxo de C fornecem uma maneira fácil de escolher um personagem para preencher os espaços de liderança em um número (e este programa tem um erro deliberado): o erro (nenhum caractere principal no mês) é causado pelo fato de que Setw (n) é volátil. Setw (n) só funciona para uma única variável subsequente. Você deve aplicar setw (n) para cada variável. Faça assim: 5. Bases de números diferentes de 10 Para a base 8 e a base 16, este é um problema fácil de resolver: a propósito, esta formatação de fluxo para diferentes bases também funciona para entrada: não há exibição geral de base arbitrária Solução integrada na linguagem. Aqui está um exemplo de uma solução: 6. Moeda Este é um tópico avançado, pois exibir moeda é mais complexo do que pode aparecer à primeira vista. Existe um recurso C avançado denominado localidade que pode lidar com esse problema de forma poderosa, mas não está habilitado em muitos compiladores (e ainda não no compilador muito comum que escolhi para este tutorial). Aqui está uma maneira de exibir moeda: esta abordagem tem muitas desvantagens. Eu converti o duplo para um não assinado muito antes de iniciar meu algoritmo, o que limita a gama de possíveis montantes em moeda. Tente experimentar com este código mdash testar as várias instruções para ver como eles funcionam. E se você é ambicioso, veja se você pode fazer um duplo trabalho diretamente, sem converter em um não assinado primeiro (e boa sorte :)). Observe também o argumento de largura para showCurrency (). Observe que é dado um valor padrão, o que torna desnecessário especificar mesmo um valor quando a função é chamada. Esta sintaxe de argumento padrão é uma característica padrão de C. Se você quer uma largura diferente de 14, você pode incluir seu próprio valor em sua chamada para a função. Assim: 7. Compreensão Esta página possui vários exemplos bastante complexos. Não leia simplesmente esta página e continue. Certifique-se de compilar e executar os exemplos e experimentar com eles também. Use todos os livros didáticos que você possa ter para adicionar à sua compreensão dos métodos mostrados. E se você não entende os exemplos, não continue. Estas páginas são Copyright copy 2000, P. Lutus. Todos os direitos reservados. Existe um conjunto de opções de linha de comando que convencerão o gcc de produzir um arquivo binário plano a partir de um arquivo fonte autônomo. Por exemplo, suponha que o conteúdo do foo. c não tenha referências externas, nada para exportar para o Linker. Gostaria de obter um pequeno arquivo com apenas as instruções da máquina para esta função, sem qualquer outra decoração. Tipo de como um arquivo (DOS), exceto o modo protegido de 32 bits. Perguntou Oct 30 09 às 0:26 As outras respostas são definitivamente o caminho a seguir. No entanto, eu precisei especificar argumentos de linha de comando adicionais para objcopy para que minha saída seja conforme o esperado. Observe que estou desenvolvendo código de 32 bits em uma máquina de 64 bits, daí o argumento - m32. Além disso, eu gosto melhor da sintaxe de montagem Intel, então você verá isso também nos argumentos. Ok, heres onde eu tinha que especificar que eu especificamente queria apenas a seção. text: Levou cerca de 2 horas de leitura e tentando diferentes opções antes de descobrir isso. Espero que isso salve outra pessoa nesse horário. Você pode passar as opções para o vinculador diretamente com - Wl, ltlinker optiongt A documentação relevante é copiada abaixo do man gcc - Wl, opção Pass opção como uma opção para o vinculador. Se a opção contiver vírgulas, ela é dividida em várias opções nas vírgulas. Você pode usar essa sintaxe para passar um argumento para a opção. Por exemplo, - Wl, - Map, output. map passa - Map output. map para o vinculador. Ao usar o linkador GNU, você também pode obter o mesmo efeito com - Wl, - Mapoutput. map. Então, ao compilar com gcc se você passar - Wl, - oformatbinary você irá gerar um arquivo binário em vez do formato elf. Onde --formatbinary informa ld para gerar um arquivo binário. Isso remove a necessidade de obvografia separadamente. Observe que --oformatbinary pode ser expresso como OUTPUTFORMAT (binário) de dentro de um script de vinculador. Se você quiser lidar com binários planos, há uma grande chance de que você se beneficie do alto nível de controle que os scripts do linker fornecem. Respondeu 6 de maio às 18:40
No comments:
Post a Comment