From cstrato at aon.at  Mon Jun 23 18:28:54 2014
From: cstrato at aon.at (cstrato)
Date: Mon, 23 Jun 2014 18:28:54 +0200
Subject: [Rd]
 =?windows-1252?q?operation_on_=91numsels=92_may_be_undefined?=
In-Reply-To: <244EC819-4336-4A49-BAEB-86B57E8A2970@r-enthusiasts.com>
References: <53A8298C.9010605@aon.at>
	<244EC819-4336-4A49-BAEB-86B57E8A2970@r-enthusiasts.com>
Message-ID: <53A855C6.1000301@aon.at>

Dear Romain,

Thank you for your suggestions, I like especially the first one.

However, you did not explain why I have never got this warning message 
on any compiler, and why only one of the two identical Ubuntu compilers 
did give this warning message?

Best regards,
Christian



On 6/23/14 3:45 PM, Romain Fran?ois wrote:
>
> Le 23 juin 2014 ? 15:20, cstrato <cstrato at aon.at> a ?crit :
>
>> Dear all,
>>
>> Since many years the following C++ code does compile on ALL Bioconductor servers (Linux, Windows, Mac) without any warnings:
>>
>>    Int_t numsels = 0;  //number of selected entries
>>    ...
>>    for (Int_t i=0; i<size; i++) {
>>       numsels = (arrMask[i] == 1) ? ++numsels : numsels;
>>    }//for_i
>
> This is confusing. I would write the loop body like this:
>
> numsels += (arrMask[i] == 1) ;
>
>
> or preferably using the STL:
>
> Int_t numsels = std::count( begin(arrMask), end(arrMask), 1 ) ;
>
> or some other variation of this, i.e. perhaps you don?t have a C++11 compiler, so perhaps one of these depending on what is arrMask:
>
> Int_t numsels = std::count( arrMask.begin(), arrMask.end(), 1 ) ;
> Int_t numsels = std::count( arrMask, arrMask + size, 1 ) ;
>
> Romain
>
>> Even on the recently added release server 'zin2' Linux (Ubuntu 12.04.4 LTS) the above code compiles w/o warnings.
>>
>> However, on the new development server 'zin1' Linux (Ubuntu 12.04.4 LTS) I get suddenly the following warning message:
>>
>> Found the following significant warnings:
>>   XPSPreProcessing.cxx:3026:56: warning: operation on ?numsels? may be undefined [-Wsequence-point]
>>
>> Interestingly, both servers do not only run the same version of Ubuntu, but also the same version of the C++ compiler, i.e. g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, and use the same flags, see:
>> http://bioconductor.org/checkResults/2.14/bioc-LATEST/zin2-NodeInfo.html
>> http://bioconductor.org/checkResults/devel/bioc-LATEST/zin1-NodeInfo.html
>>
>> My question is now, why do I suddenly get the compiler warning?
>>
>> The reason why I ask at R-devel and not Bioc-devel is that it may not only be a Bioc question, since I found the following links:
>> http://c-faq.com/expr/seqpoints.html
>> http://stackoverflow.com/questions/16838884/why-i-got-operation-may-be-undefined-in-statement-expression-in-c
>>
>> I am not sure if I understand the meaning, but until now I have never got any warning from any compiler the I have used (including MS Visual C++).
>>
>> Do I really have to replace '++numsels' with 'numsels+1'?
>>
>> Best regards,
>> Christian
>> _._._._._._._._._._._._._._._._._._
>> C.h.r.i.s.t.i.a.n   S.t.r.a.t.o.w.a
>> V.i.e.n.n.a           A.u.s.t.r.i.a
>> e.m.a.i.l:        cstrato at aon.at
>> _._._._._._._._._._._._._._._._._._
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



[Rd] =?windows-1252?q?operation_on_=91numsels=92_may_be_undefined?=
cstrato