Computer >> Máy Tính >  >> Lập trình >> lập trình C

Macro vệ sinh trong C

Ở đây, chúng ta sẽ thấy Macro hợp vệ sinh trong C. Chúng tôi biết cách sử dụng macro trong C. Nhưng đôi khi, nó không trả lại kết quả mong muốn do vô tình nắm bắt được số nhận dạng.

Nếu chúng tôi thấy mã sau, chúng tôi có thể thấy rằng nó không hoạt động bình thường.

Ví dụ

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d\n", a, b);
}

Sau khi xử lý trước, mã sẽ như thế này -

Ví dụ

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   do { int a = 0; ++a; } while(0) ;
   do { int a = 0; ++b; } while(0) ;
   printf("a = %d, b = %d\n", a, b);
}

Đầu ra

a = 10, b = 21

Ở đây chúng ta có thể thấy giá trị không được cập nhật cho a. Vì vậy, trong trường hợp này, chúng tôi sẽ sử dụng macro vệ sinh. Các macro hợp vệ sinh này là các macro mà sự mở rộng của nó đảm bảo rằng nó không tạo ra việc nắm bắt ngẫu nhiên các số nhận dạng. Ở đây, chúng tôi sẽ không sử dụng bất kỳ tên biến nào có thể gây rủi ro giao tiếp với mã đang được mở rộng. Ở đây, một biến khác ‘t’ được sử dụng bên trong macro. Điều này không được sử dụng trong chính chương trình.

Ví dụ

#include<stdio.h>
#define INCREMENT(i) do { int t = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d\n", a, b);
}

Đầu ra

a = 11, b = 21