Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Will my compiler ignore useless code?

I've been through a few questions over the network about this subject but I didn't find any answer for my question, or it's for another language or it doesn't answer totally (dead code is not useless code) so here's my question:

Is (explicit or not) useless code ignored by the compiler?

For example, in this code:

double[] TestRunTime = SomeFunctionThatReturnDoubles; // A bit of code skipped int i = 0; for (int j = 0; j < TestRunTime.Length; j++) {  } double prevSpec_OilCons = 0; 

will the for loop be removed?

I use .net4.5 and vs2013


The background is that I maintain a lot of code (that I didn't write) and I was wondering if useless code should be a target or if I could let the compiler take care of that.

like image 902
Thomas Ayoub Avatar asked Jun 24 '15 12:06

Thomas Ayoub


People also ask

Do unused functions get compiled?

Yes: for unused static functions.

Are parts of the source code ignored by the compiler?

Answer: Comments are the statements that are ignored by the compiler.


1 Answers

Well, your variables i and prevSpec_OilCons, if not used anywhere will be optimized away, but not your loop.

So if your code looks like:

static void Main(string[] args) {     int[] TestRunTime = { 1, 2, 3 };     int i = 0;     for (int j = 0; j < TestRunTime.Length; j++)     {      }     double prevSpec_OilCons = 0;     Console.WriteLine("Code end"); } 

under ILSpy it will be:

private static void Main(string[] args) {     int[] TestRunTime = new int[]     {         1,         2,         3     };     for (int i = 0; i < TestRunTime.Length; i++)     {     }     Console.WriteLine("Code end"); } 

Since the loop has couple of statements, like comparison and increment, it could be used for implementing somewhat short delay/wait period. (although not a good practice to do so).

Consider the following loop, which is an empty loop, but it will take a lot of time to get executed.

for (long j = 0; j < long.MaxValue; j++) {  } 

The loop in your code, is not a dead code, as far as dead code is concerned, the following is a dead code, and will be optimized away.

if (false) {     Console.Write("Shouldn't be here"); } 

The loop, will not even be removed by the .NET jitters. Based on this answer

like image 161
Habib Avatar answered Oct 02 '22 09:10

Habib