2016-06-15 5 views
1

私の最初の刺し傷は、C数値の再定義を可能にするプログラミング言語はありますか?この問題で

#define 2 5 
assert(2+2 == 10); 

残念ながら

error: macro name must be an identifier 

に私はまた私が思っていたスキーム

(define 2 5) 

しかし

can't define a non-symbol: (define 2 5) 

を試してみました。これが可能なプログラミング言語があれば

+0

考えを再定義することによって達成さは、しかし、C++では '+'演算子をオーバーロードして、再定義することは可能かもしれません追加中に各オペランドがどのように動作するか。 –

+1

@TimBiegeleisen: '2 + 2'はコンパイル時に評価可能な定数式なので、難しいです。標準のC++でこれを行う方法はありません。 – Bathsheba

+0

なぜあなたは尋ねていますか?避けるべき言語を知るには? – svick

答えて

1

私は心から願っています。

しかし、それは言った、私はJavaで道を知っていますか:あなたは、キャッシュされた箱入りInteger秒の値を調整するために反射を使用することができます:JVMは、127までの範囲-128のすべての値をキャッシュしなければならない、とそのキャッシュに数値を調整するメカニズムが存在します。

詳細はhttps://codegolf.stackexchange.com/questions/28786/write-a-program-that-makes-2-2-5/28818#28818を参照してください。ここでは、フルのコードです:

import java.lang.reflect.Field; 
public class Main { 
    public static void main(String[] args) throws Exception { 
     Class cache = Integer.class.getDeclaredClasses()[0]; 
     Field c = cache.getDeclaredField("cache"); 
     c.setAccessible(true); 
     Integer[] array = (Integer[]) c.get(cache); 
     array[132] = array[133]; 

     System.out.printf("%d", 2 + 2); 
    } 
} 

出力されている5、基本的にちょうど数4

+0

私はJavaのインストールについて少し憤慨しますが、うまくいきました。これは非常にクールです、答えに感謝します。 申し訳ありませんが、私は十分なバーチャルstackoverflowポイントを持っていません。 – 2pjwul

関連する問題