2015-05-06 2 views
-1

У меня вопрос о макросах в программировании на языке C. Что я знаю о макросах, так это то, что они являются предпроцессорными директивами и выполняются до этапа компиляции, и они удаляются. Так что я написал кусок кода, чтобы проверить это, но он все еще работает после стадии компиляции:C препроцессорные макросы

#define SWAP(x,y) {int temp; temp = *x;*x = *y;*y=temp;} 

int main() 
{ 
     int data1, data2; 
     while((scanf("%d%d",&data1,&data2)) == 2) 
     { 
      SWAP(&data1,&data2); 
      printf("Data1 =%d, data2 = %d\n",data1,data2); 
     } 
} 

Я понятия не имею, почему этот кусок кода все еще работает.

+2

Что вы подразумеваете под * он по-прежнему работает после этапа компиляции *? –

ответ

0

Макросы не удаляются после времени компиляции. Когда процессор работает (шаг перед компиляцией), он находит все вхождения SWAP и заменяет их определением, в такие моменты весь код расширяется и компилируется без искажений.

1

Потому что макрос сделал то, что он должен был делать. Препроцессор взял линию

SWAP(&data1,&data2); 

и заменил его

{int temp; temp = *data1;*data1 = *data2;*data2=temp;}; 

Затем кормите, что компилятор, который сделал его работу, и ваша программа работает.

Макросы - это ТЕКСТОВАЯ замена, которая происходит перед компиляцией.

+0

Большое спасибо, это объясняет много :) – Max

Смежные вопросы