How do you declare manifest constants?

H. S. Teoh hsteoh at
Thu Nov 4 17:36:24 UTC 2021

On Thu, Nov 04, 2021 at 05:24:44PM +0000, Andrey Zherikov via Digitalmars-d-learn wrote:
> On Thursday, 4 November 2021 at 17:09:31 UTC, Steven Schveighoffer wrote:
> > D doesn't have any equivalent for this.
> Is it possible to add this feature having `-C VERSION="1.2.3"` (`-D`
> is already used) to be equal to `enum VERSION="1.2.3"` in global
> namespace?
> > The closest you can get is to turn on `version` identifiers.
> > 
> > There is also a quirky `-version=123` which is IMO, a completely
> > useless feature.
> I agree - this is useless. `-version myversion=123` would be much more
> useful.

Here's a hack that uses dmd's stdin feature to inject D code into a
compile command:

	// main.d
	import __stdin : myversion;
	void main() {
		import std;

Compile command:
	echo 'enum myversion = "1.2.3";' | dmd - -run main.d


You can change the version number just by changing the echo command. And
of course, it doesn't have to be a string, it can be any valid D type,
and obviously you can declare more than one variable that can then be
read by importing from __stdin.


Don't throw out the baby with the bathwater. Use your hands...

More information about the Digitalmars-d-learn mailing list