Ir ao conteúdo
  • Cadastre-se

C como funciona essa biblioteca limits.h no arduino?


Posts recomendados

43 minutos atrás, tito_ disse:

Cara, minha professora pediu para eu da uma pesquisa sobre, mas não consegui nada que venha me trazer um esclarecimento sobre, elá e realmente uma biblioteca?

@arfneto.

recomenda algum site para está tendo uma visão mais ampla do assunto.

 

 

De um ponto de vista mais amplo, qualquer header é uma biblioteca, uma fonte de referência.


Eis limits.h em minha máquina:
 

//
// limits.h
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <limits.h> header.
//
#pragma once
#define _INC_LIMITS

#include <vcruntime.h>

#pragma warning(push)
#pragma warning(disable: _VCRUNTIME_DISABLED_WARNINGS)

_CRT_BEGIN_C_HEADER

#define CHAR_BIT      8
#define SCHAR_MIN   (-128)
#define SCHAR_MAX     127
#define UCHAR_MAX     0xff

#ifndef _CHAR_UNSIGNED
    #define CHAR_MIN    SCHAR_MIN
    #define CHAR_MAX    SCHAR_MAX
#else
    #define CHAR_MIN    0
    #define CHAR_MAX    UCHAR_MAX
#endif

#define MB_LEN_MAX    5
#define SHRT_MIN    (-32768)
#define SHRT_MAX      32767
#define USHRT_MAX     0xffff
#define INT_MIN     (-2147483647 - 1)
#define INT_MAX       2147483647
#define UINT_MAX      0xffffffff
#define LONG_MIN    (-2147483647L - 1)
#define LONG_MAX      2147483647L
#define ULONG_MAX     0xffffffffUL
#define LLONG_MAX     9223372036854775807i64
#define LLONG_MIN   (-9223372036854775807i64 - 1)
#define ULLONG_MAX    0xffffffffffffffffui64

#define _I8_MIN     (-127i8 - 1)
#define _I8_MAX       127i8
#define _UI8_MAX      0xffui8

#define _I16_MIN    (-32767i16 - 1)
#define _I16_MAX      32767i16
#define _UI16_MAX     0xffffui16

#define _I32_MIN    (-2147483647i32 - 1)
#define _I32_MAX      2147483647i32
#define _UI32_MAX     0xffffffffui32

#define _I64_MIN    (-9223372036854775807i64 - 1)
#define _I64_MAX      9223372036854775807i64
#define _UI64_MAX     0xffffffffffffffffui64

#ifndef SIZE_MAX
    #ifdef _WIN64
        #define SIZE_MAX _UI64_MAX
    #else
        #define SIZE_MAX UINT_MAX
    #endif
#endif

#if __STDC_WANT_SECURE_LIB__
    #ifndef RSIZE_MAX
        #define RSIZE_MAX (SIZE_MAX >> 1)
    #endif
#endif

_CRT_END_C_HEADER

#pragma warning(pop) // _VCRUNTIME_DISABLED_WARNINGS

 

Como vê são apenas constantes. No caso da minha máquina basta apontar para o header e apertar F12 e abre direto a definição. Usando uma versão moderna de Visual Studio e Windows.

 

No geral um header é a sua interface com a boblioteca. Lá estão estruturas, constantes e declarações de funções que estão estas sim em alguma biblioteca. E biblioteca é um tipo especial de arquivo, algo como um zip de código.

 

No windows tem em geral a extensão lib e no Linux a extensão a.

 

Porque escrever uma biblioteca?

 

A razão é bem simples: você não tem por exemplo o código fonte de printf(), fopen(), strcmp() e coisas assim. Alguém escreveu isso e está disponível em sua máquina de alguma forma. Você não iria de fato querer compilar isso de novo em todos os seus programas que usam isso afinal.  Então tem toda uma coreografia nos sistemas para isso funcionar. E é o que você já sabe: a versão compilada dessas coisas está em arquivos do tipo lib.a. e a especificação está em arquivos do tipo lib.h. Você inclui na hora de compilar o tal #include lib.h em seu programa. E na hora de compilar você ou o seu IDE especifica o local onde estão essas tais bibliotecas, digamos, stdlib.a memory.a e tal. Apenas por exemplo. Não estou dizendo que tenham esses nomes. Mas essa é a lógica.

 

Nos seus programas

 

Imagine que você tenha uma lista de 12 programas de estruturas de dados que usam listas em C. Aí você escreve uma versão bacana de listas com todas as funções normais e bem genéricas e tal. 

Claro que tem aquele exercício da lista de livros, da playlist, da fila do banco e tal. Mas todos usam lista. Se você for esperto vai logo escrever uma versão bem genérica e incluir a mesma em todos os seus programas.

 

Mas vai compilar toda hora? Não, claro que não. Você pega um arquivo com todas as funções e apenas isso, Sem main() nada disso. Compila e ai usa um programa, tipo LIB no windows ou ar no Linux, que coloca isso numa biblioteca.

 

E cria um arquivo .h com as estruturas e definições e tal.

 

E nunca mais compila essas funções a menos que ache algum erro ou crie uma função nova.

 

Para pesquisar procure por "static library" 

 

Veja esse exemplo em C++ se usa Windows. Também funciona em C. Apenas para entender a ideia

 

https://docs.microsoft.com/pt-br/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=vs-2019

 

 

 

 

 

adicionado 3 minutos depois

Ou isso 

image.thumb.png.9b3968bae64221066679ca31970ecf12.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

15 horas atrás, tito_ disse:

elá e realmente uma biblioteca?

 

Não! Ele é uma parte dela; unidade dos arquivos de cabeçalho. Está cheio de declarações , não tenho certeza se no Arduíno vem com declarações de funções meu palpite é que não, não vem mesmo com funções, só com limitações de coisas (igual na biblioteca padrão c).

 

No caso ainda de Arduíno, talvez arquitetura influencie suas declarações.

Link para o comentário
Compartilhar em outros sites

Uma "biblioteca de constantes" não é a biblioteca no sentido que acreditamos ser procurado.

 

Não direi para autor que o arquivo de cabeçalho deposito de constantes e algumas definições / declarações faz dele uma biblioteca, mas digo que é exatamente o que é; um arquivo de cabeçalho da biblioteca padrão.

 

Agora deixe o autor do tópico decidir

***

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Mauro Britivaldo disse:

Não direi para autor que o arquivo de cabeçalho deposito de constantes e algumas definições / declarações faz dele uma biblioteca

 

Entendo que goste de criar polêmicas @Mauro Britivaldo, mas uma biblioteca é exatamente isso: uma fonte de referências. E referências "constantes".  Por isso se chamam bibliotecas com o mesmo sentido daquelas cheias de livros de outras eras.

 

Se você criar um limits.c e incluir o limits.h vai gerar um arquivo limits.o de código, vazio mas vai ter alguma estrutura. E ai você provavelmente pode usar o ar ou o lib e criar uma biblioteca .lib ou .o e usar em seus programas, mesmo ela não tendo nenhum dado efetivamente dentro dela exceto o que está no header. 

 

Aí você vai achar que é de fato uma biblioteca, por ter um arquivo .lib ou .a associado, só que vazio.

 

2 horas atrás, Mauro Britivaldo disse:

Agora deixe o autor do tópico decidir

 

Não é a decisão do autor do tópico, ou minha ou sua. Apenas é a biblioteca de constantes limits.h. Muitas vezes a gente escreve isso em projetos: bibliotecas apenas com definições

Link para o comentário
Compartilhar em outros sites

Sim, dessa forma teríamos uma biblioteca: Arquivo de cabeçalho mais implementação associada.

 

2 horas atrás, arfneto disse:

Não é a decisão do autor do tópico, ou minha ou sua. Apenas é a biblioteca de constantes limits.h. Muitas vezes a gente escreve isso em projetos: bibliotecas apenas com definições

É dele, ele fez a pergunta ele escolha ou não a melhor resposta.

 
2 horas atrás, arfneto disse:

Por isso se chamam bibliotecas com o mesmo sentido daquelas cheias de livros de outras eras

Lógico, biblioteca é coleção de livros. Assim como um biblioteca em C consiste na coleção de interfaces (limits.h) mais implementações (limits.o).

 

Link para o comentário
Compartilhar em outros sites

42 minutos atrás, Mauro Britivaldo disse:

Sim, dessa forma teríamos uma biblioteca: Arquivo de cabeçalho mais implementação associada

 

Acho que eu te expliquei isso num post acima: o arquivo lib não vai ter nada exceto uma estrutura vazia para contentar, digamos, você mesmo.

 

Colocar códigos no header é muito comum, por outro lado, quando você usa C++ e templates, porque fica quase impossível separar header e código e você acaba usando apenas o .h. É assim, Mesmo que eu ache que não é. Ou você.

 

E são as tais bibliotecas. Num .h com código.

 

44 minutos atrás, Mauro Britivaldo disse:

É dele, ele fez a pergunta ele escolha ou não a melhor resposta.

 

Nunca pensei nisso. Não estou buscando dar uma melhor resposta. Só estou tentando ajudar explicando como funciona isso. Aqui não é o Stack Overflow, ou o discord ... Onde as pessoas escrevem em busca de ranking ou pura polêmica mesmo.

 

46 minutos atrás, Mauro Britivaldo disse:

Lógico, biblioteca é coleção de livros. Assim como um biblioteca em C consiste na coleção de interfaces (limits.h) mais implementações (limits.o).

 

Como queira. Eu te expliquei @Mauro Britivaldo. Se acha que mesmo vazia deve ser distribuída, ok: continue fazendo isso em seus projetos. Instrua seu pessoal, seus clientes e seus alunos e o forum.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Expondo uma tradicional visão prática da coisa...levando em conta que o amigo @arfneto está correto - são apenas #definições de constantes e sem funções()

 

Como a plataforma arduína tem por missão de ser universal e possui muitos mc's, a função deste 'arquivo' é facilitar sua universalização. Cada mc possui sua limits.h ou melhor, cada um tem seus literais 'limites'. A inclusão - que suponho ser automática - desta lib facilita a vida do 'compilador' e não necessariamente do programador. P.ex. baseada nela, o compilador te avisa se seu código cabe na memória do mc, ...

(isto foi um tradicional xute baseado em insights)

 

Mas k entre nós, penso que há maneiras mais 'manêras' que sua professora lhe pode introduzir no mundo arduíno - de novo visão prática e nada pessoal, claro. P.ex. você já fez um pisca led?

 

Link para o comentário
Compartilhar em outros sites

22 horas atrás, Isadora Ferraz disse:

A inclusão - que suponho ser automática - desta lib facilita a vida do 'compilador' e não necessariamente do programador

 

A inclusão não é automática.

 

Facilita muito a vida do programador, porque você pode se preparar para os limites em uso para a plataforma onde o código está sendo compilado, e assim se pode escrever um código mais genérico.

 

Não por acaso as rotinas da biblioteca padrão usam isso, e assim se você inclui stdlib em seu programa vai ter acesso às contantes em limits.h. E claro que isso vale para qualquer outra biblioteca que por alguma razão inclua limits.h porque assim são os #include

 

Programar sem isso quer dizer que você precisa saber de outro modo o valor disso em cada programa. Coisas simples como usar INT_MAX como um valor padrão para um int que vai guardar um mínimo ou INT_MIN no caso contrário teriam que ser improvisadas de outro modo. limits.h é o simples: Você usa as constantes e o compilador põe o valor. Integer de 16 bits? 32? 64? 36? Tanto faz, por exemplo.

 

 

 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
6 minutos atrás, arfneto disse:

Não por acaso as rotinas da biblioteca padrão usam isso, e assim se você inclui stdlib em seu programa vai ter acesso às contantes em limits.h. E claro que isso vale para qualquer outra biblioteca que por alguma razão inclua limits.h porque assim são os #include

Poizé... foi +- isso que mencionei quanto ao automatismo. No caso arduíno, talvez (só talvez) muitas outras bibliotecas fazem tal #inclusão automática pro programador. Se não faz, devia fazer pois arduino foi projetado pra 'crianças' no bom sentido, claro.

Pra agregar conteúdo, o sumido autor do tópico poderia fazer um projeto proposto pela sua professora ou autoproposto sem a preocupação com tal questão,,, #incluindo e //#desencluindo os limites e mostrar pra nós.

 

Mas de toda a forma, o modo que o amigo@arfneto explicou agora, creio que satisfez o autor como a mim. Esperemos que ele não faça ctrl-c ctrl-v no trabalho a apresentar no curso...😑

  • Curtir 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!