2016-06-15 9 views
1

나의 첫번째 찌르기는 C에 있었다숫자의 재정의를 허용하는 프로그래밍 언어가 있습니까? 이 문제에

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

불행하게도 나는 또한 계획

(define 2 5) 

하지만

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

궁금 시도

error: macro name must be an identifier 

이것이 가능한 모든 프로그래밍 언어가있는 경우.

+0

생각을 재정 의하여 달성,하지만 C++에서'+'연산자를 오버로드 한 후 다시 정의 할 수 있습니다 추가하는 동안 각 피연산자가 어떻게 작동하는지. –

+1

@TimBiegeleisen : '2 + 2'는 컴파일 타임으로 평가할 수있는 상수 표현이므로 어렵습니다. 나는 표준 C++에서 이것을하는 방법을 보지 못했다. – Bathsheba

+0

왜 물어 보는 거니? 피해야 할 언어를 알고 싶습니까? – svick

답변

1

나는 진심으로 희망합니다.

하지만, 나는 자바에있는 방법을 알고 말했다 : JVM이이 -128 +127의 범위에있는 모든 값을 캐시해야하고 : 당신이 캐시의 값을 조정 반사를 사용할 수는 Integer들 박스 해당 캐시에 숫자 값을 조정하는 메커니즘이 있습니다!

자세한 내용은 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

자바 설치에 대해 다소 화를 냈지만 효과가있었습니다. 이 답변을 주셔서 감사합니다. 죄송합니다. 투표 할 수있는 가상 stackoverflow 포인트가 충분하지 않습니다. – 2pjwul