Difference between Error and Warning during program compilation
When a program is written using some programming language, the program is first compiled before execution. Compiler checks the presence of error in the program. If the program is error free, then the compiler generates executable code. During compilation process, sometime we get "error" or "warning" messages. To execute the program and to get the correct result from the program, all the issues related to those errors and warnings must be resolved.
What is compilation ?
Compiler is a program which converts a program written in high level language to a code in a low level language. This translation is must because, computer do not understand high level programming languages. Computer only understands low level language like assembly language.
Once we have written the program using high level language, to execute the program we have to get the equivalent code in low level language. So first we have to compile the program. As a part of compilation process, the compiler check the errors in the program. Because, compiler will generate the code only if the program is error free.
What is debugging ?
Bug in the program relates to some error in the program. Debug means to remove errors. Debugging is the process of removing the errors from the program code.
Difference between error and warning
During the compilation process the compiler may give some error messages and/or some warning messages.
When we write programs using a programming language, we have to abide by the syntax and semantics of the programming language. Syntax and semantics are nothing but the rules of the programming language. Just like any language, programming languages also have their grammar and meaning of the statements.
If the grammar is violated in a program, then the compiler will generate error message. If any error is occurred during the compilation process, the compiler will not generate the executable output code. So the program can't be executed in this case.
If any type of semantic error is there in the program, then the compiler will generate warning message. If the compiler generate warning message, then the compiler may generate the output executable code. But this executable code, when executed, may not give the correct output/result.
All of us know that 5+5 will give 10. But if a statement is given, say "5+5=20" and you are asked whether this statement is correct or incorrect, then definitely you will say ERROR. The reason is, you know the fact. The same way, in the grammar of the programming language so many facts on the style of writing a program is given. So if we violate such things in the program, the compiler will give error message.
Suppose you have no idea about factorial. You are asked to say whether 5!=4511 is correct or some error is there. You will say " May be correct" or " May be wrong ". You will get confused if you have no idea of factorial. So in this case you can't say the statement is incorrect. The same way if we have written something in the program, which is not known to the compiler, then the compiler will generate warning message. Generally warnings are associated with some logical errors.
Example for Error message
We know that the following rule or grammar for assignment statement is defined in any programming language
<variable name > =< value > or < variable > or < expression >
In the assignment statement, the lvalue ( on the left side of the assignment operator )always contains a variable, where as the rvalue ( on the right side of the assignment operator ) may be a value or variable or an expression.
So the following statements are correct according to the above rule and compiler will not generate any error message:
But if following statements are written, then the compiler will definitely generate error message, since the above rules are violated.
Example for Warning Message
Now consider the if statement: the rule is as follows:
if ( condition )
then executable statement;
In a program the condition is nothing but value generated by an logical expression which involves the logical operators like <, >, <=, >=, == or !=. So if the following statement is written, the compiler will not generate any error message and also the compiler will not generate any warning as the rule is strictly followed. No rule says which operator to use in the condition.
In the condition part, the compiler needs an integer value so n<=10 will return an integer value and hence the according to rule the statement is correct.
Now consider the following statement:
Now the compiler will get confused with the condition given in the if statement. Rule says, that there we need to give logical expression and the logical expression will finally generate an integer. But here in this case no logical expression is given, but still the given expression will finally generate integer value. Since the if statement is getting the desired integer without the logical expression, the compiler will get confused and instead of generating error message, it will generate a warning message.