Go Down

Topic: [OPGELOST] Hoe gaat de compiler om met dubbel included Libraries (Read 1 time) previous topic - next topic

JevanHa

Ik ben bezig met een sketch van iemand anders om deze aan te passen naar mijn wensen. Hiervoor moet ik regelmatig in de included libraries duiken om de functie te zoeken die ik nodig heb. En dat valt mij best wel eens tegen.
Bij toeval ontdek ik dat bijvoorbeeld de library <Arduino.h> zowel in de sketch waar ik mee bezig ben als ook in de included library is toegevoegd. Mijn Compiler warnings in de IDE Preferences staat op Default. En dat vind ik soms al moeilijk genoeg om uit te vinden wat ik nu weer fout heb gedaan. :)

Wanneer ik nu de library in mijn sketch van comment slashes voorzie krijg ik zoals verwacht geen fout boodschappen te zien. Ik mag toch aannemen dat de oorspronkelijke ontwikkelaar wel weet waar hij wat heeft gebruikt. Of wordt dit soms gedaan om aan te geven deze bibliotheek wordt ook gebruikt.

Verder wil ik ook weten hoe de compiler omgaat met die bibliotheek. Worden alleen de door jouw gebruikte functies in de object toegevoegd of wordt de gehele bibliotheek toegevoegd ?

Ik hoop dat dit laatste niet gebeurt.
Kind regards
Jan
Nederlands Forum   http://arduino.cc/forum/index.php/board,77.0.html

nicoverduin

Als een library goed is opgezet kun je hem zelfs wel 10x opnemen. Dat kan je zien door een zgn. include guard.

Dat is in de Arduino.h bestand te zien als:
Code: [Select]

#ifndef Arduino_h
#define Arduino_h

En aan het eind staat er nog een
Code: [Select]

#endif


Dit betekent dat de compiler kijkt of er al een definitie is "Arduino_h". Zo niet gaat hij hem definieren en alles uitvoeren wat erna komt.
Bij de volgende include Arduino.h is Arduino_h reeds gedefinieerd en slaat hij alles over.

Als je echter met andere ontwikkelomgevingen werkt, dan moet de include "Arduino.h" vaak er wel bij.  En of de ontwikkelaar weet wat hij doet? .....
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

septillion

Verder wil ik ook weten hoe de compiler omgaat met die bibliotheek. Worden alleen de door jouw gebruikte functies in de object toegevoegd of wordt de gehele bibliotheek toegevoegd ?
De compiler compiled alle libraries die zijn toegevoegd. De linker daarentegen linkt alleen de functies die jij gebruikt :D
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

JevanHa

Ja die constructies heb ik meer gezien. Alleen bij deze library heb ik dat niet gezien. Maar ook geen waarschuwingen in die richting tijdens het compileren. Vandaar de vraag.
Weet je ook toevallig wat er in de object wordt geladen. Alles of alleen de functies die je hebt aangeroepen ?
Dank je wel voor je antwoord.
Kind regards
Jan
Nederlands Forum   http://arduino.cc/forum/index.php/board,77.0.html

JevanHa

En ook dat beantwoord weer mijn vragen. Beide heren hartelijk dank voor de antwoorden. :) :)

oeps dit is niet bepaald een website waar je een snelle discussies met elkaar kan starten.
Ik heb net bijna een bekeuring gekregen voor te snel antwoorden. Het bleef gelukkig alleen bij een berisping.  :)

The message has the following error or errors that must be corrected before continuing: You have exceeded the number of posts you can make in a 5 minutes period. Please try again later.
Kind regards
Jan
Nederlands Forum   http://arduino.cc/forum/index.php/board,77.0.html

septillion

Als je wat langer lid bent / wat meer posts hebt wordt die berking opgeheven ;) Tegen de spam die hier nogal eens voorbij komt.

Overigens zou iedere .h eigenlijk de guard moeten hebben... Hoeft geen probleem te zijn (want op meer dan één plek de .h laden is vaak ook nodig) maar het kan wel als dat dan in een circeltje gebeurd...
Mooi stukje om te lezen: Headers and includes: Why and How
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

Jantje

Je kan ook
Code: [Select]
#pragma once
in je headers zetten. Das een pak makkelijker. Ik ben nu bezig om dat automatisch te doen in alle header files in Sloeber omdat er zoveel mensen zijn die dit concept niet echt snappen.
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

JevanHa

#pagma once
moet daar dan nog wat om heen gezet worden of is het voldoende om dat eenmalig te zetten ?
Kind regards
Jan
Nederlands Forum   http://arduino.cc/forum/index.php/board,77.0.html

JevanHa

Overigens zou iedere .h eigenlijk de guard moeten hebben... Hoeft geen probleem te zijn (want op meer dan één plek de .h laden is vaak ook nodig) maar het kan wel als dat dan in een circeltje gebeurd...
Mooi stukje om te lezen: Headers and includes: Why and How
Echt ik ben begonnen met het te lezen, maar op een gegeven moment begon ik toch echt te verdrinken in kennis die mij nog aan alle kanten ontbreekt.

Ik ontkom er niet aan om libraries te openen en te lezen wanneer ik iets wil waarvan ik niet weet of dit mogelijk is of niet begrijp hoe ik er mee om moet gaan. Maar altijd begrijpen dat doe ik nog lang niet.
Ik ben nu bezig mij kennis op te doen van NeoGPS libraries van /dev. Ik durf echt niet te zeggen dat hij niet documenteerd heeft en sinds ik de Markdown viewer in Notepad++ als Plugins beschikbaar heb is het lezen wat makkelijker geworden. Maar alles begrijpen doe ik nog bij lange na niet.
Maar ja wat wil wanneer je deze hobby serieus probeert op te pakken. :)
Kind regards
Jan
Nederlands Forum   http://arduino.cc/forum/index.php/board,77.0.html

septillion

Ook al is de markdown plugin natuurlijk altijd handig maar uhm
Quote
readme.txt

These .MD files are in github markdown format.  They are intended to be read on the github website, as linked from the top repository page.
Vandaar ;)
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

Go Up