01/10/2018, 13:26

#define in C/C++

Mọi người ơi,
Cho em hỏi #define trong CC++ có tác dụng, cách dùng gì vậy ạ?
Có link nào viết chi tiết về define không ạ?

#include <bits/stdc++.h>
using namespace std; 

typedef pair<int,int> ii;
typedef long long ll; 
typedef long double ld;
typedef unsigned long long llu;

#define X  first
#define Y  second
#define mp make_pair
#define pb push_back
#define ep emplace_back
#define sz(a) (int) a.size()
#define FOR(x,a,b) for (int x=a;x<=b;x++)
#define FOD(x,a,b) for (int x=a;x>=b;x--)
#define REP(x,a,b) for (int x=a;x<b;x++)
#define RED(x,a,b) for (int x=a;x>b;x--)
#define EL printf("
")
#define debug 1

const double pi = acos(-1.0);

đoạn code trên define có tác dụng gì và cách dùng ra sao ạ?

HK boy viết 15:37 ngày 01/10/2018

#define là định nghĩa lại 1 đoạn code bằng 1 thứ gì đó. Sử dụng define để rút gọn 1 đoạn code nào đó, tuy nhiên khi sử dụng cần phải nhớ bạn dùng để làm gì và tránh lạm dụng define.

#define X first
#define Y second

Cách define này có ích khi bạn code với pair<>.

#define mp make_pair
#define pb push_back
#define ep emplace_back
#define sz(a) (int) a.size()

Rút gọn lệnh. Các lệnh này bạn tìm hiểu trên Google.

#define FOR(x,a,b) for (int x=a;x<=b;x++)
#define FOD(x,a,b) for (int x=a;x>=b;x--)
#define REP(x,a,b) for (int x=a;x<b;x++)
#define RED(x,a,b) for (int x=a;x>b;x--)

Rút gọn vòng lặp for.

Mình đã từng chết dở khi chạy define for thay vì viết vòng for tử tế, code dính lỗi truy cập ngoài mảng tùm lum.

#define debug 1

1 biến in ra dùng để debug. Đây không phải code của mình nên mình không biết biến này dùng cụ thể như thế nào

#define EL printf("\n")

1 câu lệnh lười để in ra 1 dòng mới.


Có vẻ như bạn lấy đoạn code này ở 1 trang competitive programming nào đó.

Tại sao mình khuyên bạn không nên lạm dụng define? Chạy thử đoạn code sau:

#define ten 5+5

int main() {
    cout << ten * ten << endl;
}

Bạn thử đoán xem kết quả là bao nhiêu?

Bài liên quan
0