Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Do I need to initialise variables - programming in C, C++, Perl, PHP, Python, Ruby or Java.

Starting with a clean slate. Are variables initisialised, and if so, how? Even with this fundamental question, languages vary considerably.

C and C++

From my (e)mailbag ...

"""In a piece of code we •[99]ve written we declare an array, but we do not fill the elements with values, we assume (dangerous I know) that it has defaulted all elements to zero. During the code execution only a few elements of the array are set to an integer value BUT it seems on occasions that there are some elements that have values in other than zero. These elements are not referenced in the code to be changed, so we assume the problem lies with the declaration / initialisation of the array. On some days this happens continually from the start of the job running, but on other days when the code is loaded is does not happen at all."""

When you set up an array in C or C++, it won't be initialised unless you force it to be - it will take whatever values happen to be in left in the memory from precious actions. More often than not, that does turn out to be integer zeros as there's a lot of blank space in many (other) programs, and also many libraries / languages clear to zero on exit. For global arrays, it's going to be down to the specific linker / loader as to what it does. For anything allocated with calloc, the manual tells you it's initiiased, with malloc that is not the case - and (?) which does "new" use internally? For local variables, assume no intitialisation. Best / surest bet is, frankly, to loop in zeros as that will work no matter what's going on internally. If you have a lot of it to do, write the code just once as a function.

Some pointers there - hope they help. In summary, I'm not surprised that you've got a piece of code that works most of the time ... kinda typical for code that doesn't initialise when it should ;-/

Python and Ruby

Variables are NOT initisialised automatically, and if you try and use a variable before it exists, you'll get an error:

wizard:~ graham$ python
Python 2.7 (r27:82508, Jul 3 2010, 20:17:05)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> abc += 8
Traceback (most recent call last):
  File "", line 1, in
NameError: name 'abc' is not defined
>>>


wizard:may11 graham$ irb
>> puts "Look at #{varname} please"
NameError: undefined local variable or method `varname' for main:Object
  from (irb):1
>>


Perl and PHP

New variables are assumed to contain an empty string ... which (if you use them in a numeric context will be treated as zero.

If you run Perl with a -w command line switch of with
  use warnings;
you'll duely get warnings.

In PHP, you can set the E_NOTICE error level flagging to give you warnings if you use the contents of a variable that's not been initialised. See the PHP manual for how to set that - you can do so in your web server setup, your php.ini configuration file, or script by script.

Java

The Java compiler will throw out any possible attempt to use an uninitialised local variable:

wizard:may11 graham$ javac Flawed.java
Flawed.java:4: variable somevar might not have been initialized
         System.out.print(somevar);
                         ^
1 error
wizard:may11 graham$


and indeed that sometimes very irritating - if you initialise a variable in two different ways (in and if and else) some compilers will still complain and you'll need to explicitly set it to a value prior to the tonditional statment just to be overwritten one way or another within the conditions.

Arrays and member variables of objects are automatically initialised - to the default (fallback) value for their type - false for boolean, 0 for numerical types, null for reference types.
(written 2011-05-05)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C201 - C and C based languages - C Language Fundamentals
  [4324] Learning to program - variables and constants - (2014-11-22)
  [3917] BODMAS - the order a computer evaluates arithmetic expressions - (2012-11-09)
  [3591] Integer types, and integer overflows, in C - (2012-01-25)
  [3234] Your program - you just provide the filling in the sandwich - (2011-04-08)
  [3120] Learning to write good programs in C and C++ - separating out repeated code - (2011-01-04)
  [2842] Staring a C course with Hello World - why? - (2010-06-30)
  [2576] What does const mean? C and C++ - (2010-01-15)
  [2005] Variables and pointers and references - C and C++ - (2009-01-23)
  [1671] Compiling C programs with gcc - an overview - (2008-06-10)
  [888] Turning C from source to a running program - (2006-10-06)

H103 - PHP - Variables, Operators and Expressions
  [3916] PHP variables - dynamically typed. What does that mean? - (2012-11-08)
  [2215] If nothing, make it nothing. - (2009-06-02)
  [748] Getting rid of variables after you have finished with them - (2006-06-06)
  [483] Double Dollars in PHP - (2005-11-02)

J703 - Java - Variables
  [4345] Incrementing a variable in Java - Pre and Post Increment - (2014-12-08)
  [3365] Turning bright delegates into bright and knowledgable ones - (2011-07-21)
  [3041] Java - basic rules for arithmetic, variables and conversion - (2010-11-10)
  [3038] Setting up individual variables, and arrays, in Java - some commented examples - (2010-11-09)
  [2153] Class Loading and Variable Conversion in Java - (2009-05-02)
  [2148] Variable scope in Java Servlets and other web applications - (2009-05-01)
  [1448] Question on division (Java) - Also Perl, PHP, Python ... - (2007-11-28)
  [127] Conversion and coercion in Java - (2004-11-22)

P202 - Perl Fundamentals
  [3574] Perl functions such as chop change their input parameters - (2012-01-10)
  [3542] What order are operations performed in, in a Perl expression? - (2011-12-07)
  [3398] Perl - making best use of the flexibility, but also using good coding standards - (2011-08-19)
  [3329] Perl from basics - (2011-06-20)
  [3102] AND and OR operators - what is the difference between logical and bitwise varieties? - (2010-12-24)
  [3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
  [2876] Different perl examples - some corners I rarely explore - (2010-07-18)
  [2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
  [2442] Variable storage - Perl, Tcl and Python compared - (2009-10-08)
  [1946] Variable Types in Perl - (2008-12-15)
  [1826] Perl - Subs, Chop v Chomp, => v , - (2008-10-08)
  [1726] Hot Courses - Perl - (2008-07-28)
  [1312] Some one line Perl tips and techniques - (2007-08-21)
  [184] MTBF of coffee machines - (2005-01-20)

R103 - Basic Ruby Language Elements
  [3758] Ruby - standard operators are overloaded. Perl - they are not - (2012-06-09)
  [3430] Sigils - the characters on the start of variable names in Perl, Ruby and Fortran - (2011-09-10)
  [2617] Comparing floating point numbers - a word of caution and a solution - (2010-02-01)
  [2613] Constants in Ruby - (2010-02-01)
  [2296] Variable scope - what is it, and how does it Ruby? - (2009-07-18)
  [2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
  [986] puts - opposite of chomp in Ruby - (2006-12-15)

Y102 - Python - Fundamentals
  [3886] Formatting output - why we need to, and first Python example - (2012-10-09)
  [3551] Some terms used in programming (Biased towards Python) - (2011-12-12)
  [3181] Beware - a=a+b and a+=b are different - Python - (2011-02-23)
  [3083] Python - fresh examples from recent courses - (2010-12-11)
  [2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
  [2368] Python - fresh examples of all the fundamentals - (2009-08-20)
  [1878] Pascals Triangle in Python and Java - (2008-11-10)
  [1461] Python - input v raw input - (2007-12-06)
  [1430] Integer v float - Python - (2007-11-12)
  [956] Python security - trouble with input - (2006-11-30)
  [633] Copying a reference, or cloning - (2006-03-05)
  [328] Making programs easy for any user to start - (2005-05-29)


Back to
Between a rock and a hard place.
Previous and next
or
Horse's mouth home
Forward to
Letter to The Editor
Some other Articles
The future of canal management and charities - Kennet and Avon Canal bias
Does Well House Manor Hotel in Melksham offer lots of discounts?
Passing parameters to Python functions - the options you have
Letter to The Editor
Do I need to initialise variables - programming in C, C++, Perl, PHP, Python, Ruby or Java.
Between a rock and a hard place.
International travel to the UK - coming to Melksham
Melksham Chamber of Commerce - grows to appoint new Press Officer. Welcome. Sam
Small scale improvement - big scale gain. And they CAN be done with local knowledge
Wanted - a look to the future
4350 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3278_Do- ... Java-.html • PAGE BUILT: Thu Sep 18 15:30:25 2014 • BUILD SYSTEM: WomanWithCat