Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Biên dịch Điều kiện Một Cấp (#ifdef/#ifndef/#else/#endif)

    Chỉ thị tiền xử lý #ifdef TÊN giữ lại đoạn mã phía sau nếu TÊN đã được định nghĩa (nằm trong danh sách macro đã #define, không quan tâm giá trị), ngược lại đoạn mã đó bị loại bỏ. #ifndef TÊN có ý nghĩa ngược lại: giữ lại nếu TÊN chưa được định nghĩa. Chỉ thị #else (nếu có) đánh dấu nhánh thay thế, và #endif kết thúc khối điều kiện.

    Cho tập hợp các macro đã định nghĩa (chỉ cần biết tên, không cần giá trị) và một "kịch bản" tiền xử lý gồm các dòng lệnh không lồng nhau (mỗi khối #ifdef/#ifndef ... [#else] ... #endif là độc lập, không có khối nào nằm bên trong khối khác), xen kẽ với các dòng mã nguồn thông thường. Hãy in ra đúng các dòng mã nguồn còn sót lại sau khi tiền xử lý, giữ nguyên thứ tự ban đầu.

    Ví dụ: định nghĩa DEBUG; kịch bản

    #ifdef DEBUG
    printf("debug on");
    #else
    printf("release");
    #endif
    

    vì DEBUG đã định nghĩa nên kết quả chỉ in ra dòng printf("debug on");.

    • Định dạng đầu vào:

      Dòng đầu chứa số nguyên nnn (0≤n≤1000 \le n \le 1000≤n≤100) — số macro đã định nghĩa. nnn dòng tiếp theo, mỗi dòng là tên một macro (các tên đôi một khác nhau). Dòng tiếp theo chứa số nguyên mmm (0≤m≤3000 \le m \le 3000≤m≤300) — số dòng của kịch bản tiền xử lý. mmm dòng tiếp theo, mỗi dòng là một trong: #ifdef TÊN, #ifndef TÊN, #else, #endif, hoặc một dòng mã nguồn bất kỳ không bắt đầu bằng ký tự #. Dữ liệu đảm bảo các khối #ifdef/#ifndef ... #endif không lồng nhau và hợp lệ (mỗi khối mở có đúng 1 #endif tương ứng, #else nếu có chỉ xuất hiện đúng 1 lần trong mỗi khối).

    • Định dạng đầu ra:

      In ra các dòng mã nguồn còn lại sau khi tiền xử lý, theo đúng thứ tự xuất hiện ban đầu, mỗi dòng một dòng. Nếu không còn dòng nào, không in gì.

    Ví dụ:

    Đầu vào:

    1
    WINDOWS
    5
    #ifdef DEBUG
    printf("debug on");
    #else
    printf("release");
    #endif
    

    Đầu ra:

    printf("release");
    

    Đầu vào:

    2
    DEBUG
    LINUX
    5
    #ifdef DEBUG
    printf("debug on");
    #else
    printf("release");
    #endif
    

    Đầu ra:

    printf("debug on");
    

    Đang tải editor...