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 <cstr...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel