Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > incrementing an integer at compile time, across source files

Reply
Thread Tools

incrementing an integer at compile time, across source files

 
 
Sean Dettrick
Guest
Posts: n/a
 
      08-06-2003
I am wondering if it is possible to increment an integer at compile
time using template<int N> (or by any other method, e.g. compiler
directives etc), across multiple source files.

This may sound crazy, but I wish to build a string array (which
requires no user maintenance) of source file RCS version numbers!
The idea is, I would like to be print the beggers out or operate on
them at run time if I feel like it, by using a (maintenance free) loop.
By maintenance free, I mean that in each source file I would like to
be able to refer to some integer, say RCS::N, which is automatically
different in every source file, without the user having to specify
it (except for an initial value).

i.e. I would like to be able to have a set of files like this:

// rcs.h:
#include <string>
namespace RCS{
const int Nfiles_max=20; // max number of source files
string[Nfiles_max] Version; // to hold RCS version numbers of source files
int N;

template<int N> some_handy_way_to_increment_N_at_compile_time{};
};

// fileA.cpp:
// if fileA.cpp is compiled first, want RCS::N to have the value 0.
#include "rcs.h"
RCS::Version[RCS::N] = "$Revision$"
/* ... stuff ... */

// fileB.cpp:
// if fileB.cpp is compiled second, want RCS::N to have the value 1.
#include "rcs.h"
RCS::Version[RCS::N] = "$Revision$"
/* ... different stuff ... */

// fileC.cpp:
// if fileC.cpp is compiled third, want RCS::N to have the value 2.
#include "rcs.h"
RCS::Version[RCS::N] = "$Revision$"
int main(){

for (int i=0; i<RCS::Nfiles_max; i++ ) cout << RCS::Version[i] << endl;

if ( RCS::Version[0] != RCS::Version[1] ) cout << "version mismatch!" << endl;

}


Any ideas on this?
I presume it is impossible, but hope to be pleasantly surprised.

Thanks in advance,
Sean Dettrick
 
Reply With Quote
 
 
 
 
Alf P. Steinbach
Guest
Posts: n/a
 
      08-07-2003
On 6 Aug 2003 16:46:54 -0700, http://www.velocityreviews.com/forums/(E-Mail Removed) (Sean Dettrick) wrote:

>I am wondering if it is possible to increment an integer at compile
>time using template<int N> (or by any other method, e.g. compiler
>directives etc), across multiple source files.
>
>This may sound crazy, but I wish to build a string array (which
>requires no user maintenance) of source file RCS version numbers!
>The idea is, I would like to be print the beggers out or operate on
>them at run time if I feel like it, by using a (maintenance free) loop.
>By maintenance free, I mean that in each source file I would like to
>be able to refer to some integer, say RCS::N, which is automatically
>different in every source file, without the user having to specify
>it (except for an initial value).
>
>i.e. I would like to be able to have a set of files like this:
>
>// rcs.h:
>#include <string>
>namespace RCS{
> const int Nfiles_max=20; // max number of source files
> string[Nfiles_max] Version; // to hold RCS version numbers of source files
> int N;
>
> template<int N> some_handy_way_to_increment_N_at_compile_time{};
>};
>
>// fileA.cpp:
>// if fileA.cpp is compiled first, want RCS::N to have the value 0.
>#include "rcs.h"
>RCS::Version[RCS::N] = "$Revision$"
>/* ... stuff ... */
>
>// fileB.cpp:
>// if fileB.cpp is compiled second, want RCS::N to have the value 1.
>#include "rcs.h"
>RCS::Version[RCS::N] = "$Revision$"
>/* ... different stuff ... */
>
>// fileC.cpp:
>// if fileC.cpp is compiled third, want RCS::N to have the value 2.
>#include "rcs.h"
>RCS::Version[RCS::N] = "$Revision$"
>int main(){
>
> for (int i=0; i<RCS::Nfiles_max; i++ ) cout << RCS::Version[i] << endl;
>
> if ( RCS::Version[0] != RCS::Version[1] ) cout << "version mismatch!" << endl;
>
>}
>
>
>Any ideas on this?
>I presume it is impossible, but hope to be pleasantly surprised.


It's not impossible, but very labor-intensive: you have to write your
own compiler, unless you can find one that supports what you think you
need (a typical compiler retains no memory from one compilation to
the next).

What you think you need is not what you need.

Also, the assumption of identical revision numbers for compatible
source files is probably unfounded.

<ot>
One solution to what appears to be the real problem is to use a source
control system + agreed on rules for checking in and checking out.
</ot>

 
Reply With Quote
 
 
 
 
Dave Rahardja
Guest
Posts: n/a
 
      08-07-2003
On Thu, 07 Aug 2003 00:06:24 GMT, (E-Mail Removed) (Alf P. Steinbach) wrote:
><ot>
>One solution to what appears to be the real problem is to use a source
>control system + agreed on rules for checking in and checking out.
></ot>


Agreed, this seems to be a problem best solved by your version control system.
Try reading up on automatically-expanded version contral tags that you can
embed in your source code (such as $Revision$, etc.) to see if they suit your
needs.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to compile the following source code in VC6// I have error inVC++6 but compile ok in GCC fAnSKyer C++ 2 06-07-2009 07:57 AM
Compile source files mistral C++ 8 03-09-2009 06:25 PM
cant compile on linux system.cant compile on cant compile onlinux system. Nagaraj C++ 1 03-01-2007 11:18 AM
CType(x,Integer) vs. Integer.Parse(x) =?Utf-8?B?Sm9l?= ASP .Net 7 02-07-2006 02:30 AM
Split a class across two source files jeremy.figgins@gmail.com C++ 2 12-15-2005 05:30 PM



Advertisments