Link to home
Start Free TrialLog in
Avatar of TimYates
TimYatesFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Why does this compile?

Well, I know why it does, I just was wondering at what point, and at what part of the java API does this get converted into proper code?

Is it at compilation?  Or execution?

Hehehe...now THIS is unmaintanable code ;-)

File:  a.java-----------------------------------------
/*
\u002a\u002f\u0070\u0075\u0062\u006c\u0069\u0063
\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0061
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020
\u0073\u0074\u0061\u0074\u0069\u0063\u0020
\u0076\u006f\u0069\u0064\u0020
\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0061
\u0029\u007b\u0053\u0079\u0073\u0074\u0065\u006d\u002e
\u006f\u0075\u0074\u002e
\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028
\u0022\u0048\u0069\u0022
\u0029\u003b\u007d\u007d\u002f\u002a
*/
SOLUTION
Avatar of JakobA
JakobA

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
The unicode characters are converted as part of preparation for compilation.

Here for example is the explanation for one such character:
http://www.javaspecialists.co.za/archive/Issue050.html

But as far as I know, all they are converted then
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of JakobA
JakobA

and so 'a.java' gets compiled to 'a.class' :-)
Avatar of TimYates

ASKER

But shouldn't the character sequence:

\u002b

for example, only be valid inside a String literal of a java file?
The preproccessing change all the characters not only the ones in the String literals. The idea is not ot have troubles with the encodings I suppose. So it is a valid character no matter where it is.

"A Java program is a sequence of characters. These characters are represented using 16-bit numeric codes defined by the Unicode standard.[1] Unicode is a 16-bit character encoding standard that includes representations for all of the characters needed to write all major natural languages, as well as special symbols for mathematics. Unicode defines the codes 0 through 127 to be consistent with ASCII. Because of that consistency, Java programs can be written in ASCII without any need for programmers to be aware of Unicode. "

From the second link... It looks like the normal ASCII coding we use is just for programmers convinience...
Why don't you look at the link. I'll try to find some more info about all this....
Nope.  It is just *also* valid there.   javac thinks in unicode, so it is not really the unicode literals that are translated. It is everything else that is converted to unicode from whithever alphabet the file is written in.
JakobA,

Can you give us any source why you think so?
Nothing better than what you yourself have already given. Guess I butted in. sorry.
JakobA,

No problem. Just it is an interested thing (and something that not everyone even ever thought of ) so if you have any other sources?

Venabili
> The preproccessing change all the characters

So Java DOES have a preprocessor?

Why am I not allowed #ifdef then? ;-)

Bah!
A question I ask myself every time when I start writing in Java after a few days writing in C :)

It looks like the compiler makes some pre proccessing...

Thanks to both of you :-)

It still seems wrong...

Either it should only do chars in String constants, or allow me #defines ;-)

Hee hee!

Back to moving house!! :-)

Tim
Thanks.

Is not the #ifdef of C intended for machine specific situations?
   If this comp has 16-bit words then do this, else do that.

In the enthusiasm of "we are making a machine independent language" that would be left out.

Anyway  #ifdef (and particularly #define) are some of the prime 'shot yourself in the foot'-features of C. I tend to say good riddance :-)

regards JakobA
Absolutely agree that it seems wrong but... can we do anything? :)

Venabili
> I tend to say good riddance :-)

Yeah, but they were SOOOO useful for building the same source up for different machines/releases, etc

#ifndef SHAREWARE
// Full release code in here
...
...
...
#endif

:-(