Вставка персонажа в качестве токена - PullRequest
0 голосов
/ 22 декабря 2010

Мне интересно, возможно ли вставить символ в качестве токена в C во время выполнения.Что-то вроде

a = OPERATION(3, 4, '+')

будет обработано в

a = 3 + 4  

Есть ли способ сделать это?

Редактировать: Я хотелдобавить еще немного информации.Очевидно, что это не может быть сделано с препроцессором.Мне интересно, есть ли короткий способ сделать,

int i;
char sign[] = "+-*/";
for (i = 0; i < 4; i++)
  printf("%d\n", OPERATION(3, 5, sign[i]));

Я знаю, что мы можем создать функцию как,

int OPERATION(int a, int b, char c);

Но это не то, о чем я спрашиваю.

Ответы [ 3 ]

3 голосов
/ 22 декабря 2010

Как насчет этого:

#define OPERATION( A, B, OP )   ((A) OP (B))

Однако, как отмечает Делнан ниже, вам придется изменить свой вызов на:

a = OPERATION(3, 4, +)
1 голос
/ 23 декабря 2010
#define OPERATION(A,B,OP)     (OP=='+'?(A)+(B):OP=='-'?(A)-(B):OP=='*'?(A)*(B):OP=='/'?(A)/(B):NULL)

OPERATION(3,5,'+') возвращает 8
OPERATION(9,2,'/') возвращает 4
OPERATION(9,3,'*') возвращает 27
OPERATION(3,5,'-') возвращает -2
OPERATION(3,5,'M') возвращает 0

1 голос
/ 23 декабря 2010

Может быть, вы хотите это:

#define OPERATION(a, b, op) ( \
    (op) == '+' ? (a) + (b) : \
    (op) == '-' ? (a) - (b) : \
    (op) == '*' ? (a) * (b) : \
    (op) == '/' ? (a) / (b) : 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...