2016-06-06 2 views
1

나는 C에서 인텔리 일하고, 우리는 어떤 방법으로이 작업을 수행 할 수 있는지 궁금 :매크로

#define OPERATION(operator) 1 (operator) 3 

을하고

// Some code (those are exemples) 
a = OPERATION(+); 
a = OPERATION(==); 
// Some more code 

감사처럼 사용 당신이 대답을 위해

내가 작업하고있는 코드는이 코드를 개선하여 매트릭스를 통해 연산을 시도합니다. 나는 아직도 그 일을하고있다. 미래에는 Duff의 장치를 외부에서도 사용하려고했습니다.

#define MATRIX_OPERATION(ans,a,b,width,height,eqOp,op) int y, n, orig = ((height) + 9)/10, swControl = (height)%10; \ 
for(int x=0; x<(width); x++){ \ 
y = 0; \ 
n = orig; \ 
switch (swControl){ \ 
    case 0: do { (ans) (eqOp) (b) (op) (a); \ 
    case 9: (ans) (eqOp) (b) (op) (a); \ 
    case 8: (ans) (eqOp) (b) (op) (a); \ 
    case 7: (ans) (eqOp) (b) (op) (a); \ 
    case 6: (ans) (eqOp) (b) (op) (a); \ 
    case 5: (ans) (eqOp) (b) (op) (a); \ 
    case 4: (ans) (eqOp) (b) (op) (a); \ 
    case 3: (ans) (eqOp) (b) (op) (a); \ 
    case 2: (ans) (eqOp) (b) (op) (a); \ 
    case 1: (ans) (eqOp) (b) (op) (a); \ 
     } while (--n); \ 
}} 
+2

그리고 '1 + 3'보다 짧습니다. 매크로가 너무 복잡해지면 코드가 흐려지고 유지 관리가 어려워집니다. 또한 – Olaf

+0

1, 3은 무엇입니까? 방법? –

+1

나는 단순화 된 코드를 보여주고 있습니다. 일부 행렬 연산을 사용하여 더프의 장치를 만들려고합니다. 모든 함수에서 동일한 코드가 반복되며 연산자 만 다릅니다. 매크로를 사용하여 동시에 모든 기능을 향상시키고 싶습니다. (하나와 3은 숫자 일뿐입니다) – Skrime

답변

1

예, 거의 정확히 시도 같은 수 있습니다 :

#define OPERATION(operator) 1 operator 3 
+0

다음과 같은 오류가 발생하면 계속 오류가 발생합니다. 오류 : 예상되는 식 MATRIX_OPERATION (ans [x] [y ++], a [x] [y] b [x] [y], 너비, 높이, =, *). GCC는 같음과 더하기 기호를 가리 킵니다. 전처리 기가 변수 이름 지정 토큰을 사용하기 때문에 발생한다고 생각합니다. – Skrime

+0

@Skrime : 실제 예제를 질문에 추가하고 그 이유는 읽기 쉬운 방식보다 덜 복잡합니다. 지나치게 단순화했을 수도 있습니다. – Olaf

+0

@Skrime'MATRIX_OPERATION'이란 무엇입니까? 실제 코드를 보여주십시오. – melpomene

0

그것은 작동 할 수 있지만 것은 당신이 쉽게 오히려 1 + 3를 할 수있는 이유 코드를 예를 들어 걸릴처럼 복잡하게하는 것입니다 매크로를 사용하는 것보다. 그런 생각에 찬사를 보냈지 만.