|
|
View previous topic :: View next topic |
Author |
Message |
edmundopt
Joined: 08 Dec 2011 Posts: 15 Location: Portugal
|
CCS compiler 4.124 warning |
Posted: Wed Dec 21, 2011 8:19 am |
|
|
Hello, I would like to know if there's some code, like #pragma or something that makes the compiler show a warning when a global variable is declared more than once!
Code: |
#pragma case
#include <16F877A.h>
#device ADC=8
#fuses HS // High Speed Osc (20 Mhz Crystal)
#FUSES PUT //Power Up Timer (72ms page 39 on pic16f87xA)
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No lvp, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NOWDT //No Watch Dog Timer
#use delay(clock=20000000)
short GLOBAL_SHORT;
void main()
{
disable_interrupts(GLOBAL);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF); // no AD(AnalogDigital) converter
setup_psp(PSP_DISABLED); // no PSP port
setup_timer_1(T1_DISABLED); // no TMR1 timer1
setup_timer_2(T2_DISABLED,0,1); // no TMR2 timer 2
setup_comparator(NC_NC_NC_NC); // no comparator
setup_vref(FALSE);
setup_spi(SPI_SS_DISABLED);
disable_interrupts(GLOBAL);
short GLOBAL_SHORT; // can the compiler report a warning ?
GLOBAL_SHORT = TRUE;
}
|
In other words, maybe a way that the compiler only acepts a unique name per variable |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19520
|
|
Posted: Wed Dec 21, 2011 8:27 am |
|
|
_If_ you declared a global variable twice, the compiler would complain.
However you are not. It is legal in C, to have a global variable with a name, and a local variable with the same name. the rules are that if there is a local variable, it has priority locally over the global variable. So syntactically it is quite legal.
Key solution is to standardise on naming. Basic rules - use capital names for DEFINES, not variables. Then use a key word/letter, to say that a variable is global. You appear to almost be doing so, by using 'GLOBAL' as part of the name.
General comment - in C, it is _not_ legal to define variables 'inside' the code. Definitions must be at the start of a routine or code block. CCS does not complain about this (it is legal in C++), but it does cause erratic behaviour.
If you make your definitions at the start of the block, it makes simple visual inspection for faults _much_ easier.
Best Wishes |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Wed Dec 21, 2011 8:46 am |
|
|
As Ttelmah said it is a legal construction in C to have local and global variables with the same name. However, I can imagine that it is easy to create an error where you by accident give two variables the same name and then it could be very difficult to trace the problem.
I don't know of any compiler having a pragma code for enabling such kind of error checks but by good programming practices it is easy to avoid these problems. The rules I use are:
1) Use as little global variables as possible. Code is easier to maintain when the scope of a variable is small and has the extra benefit that the compiler can re-use RAM.
2) Give global variables a distinctive name starting with a 'g_', for example g_myvar and g_HugeReceiveBuffer. |
|
|
edmundopt
Joined: 08 Dec 2011 Posts: 15 Location: Portugal
|
|
Posted: Wed Dec 21, 2011 9:20 am |
|
|
Thank you, I will go for the add global to variable name, it's the best option and a smart one, allways learning
Considering the PIC18f, more global variables, or more variables only mean more RAM used right, since the harvard architecture allows this, or I'am thinking wrong ? |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|