C Preprocessor and Macros (bộTiền xử lý)

Trong hướng dẫn này, bạn sẽ được giới thiệu về bộ tiền xử lý c và bạn sẽ học cách sử dụng #include, #define và biên dịch có điều kiện với sự trợ giúp của các ví dụ.Hoạt động của C Preprocessor

Bộ tiền xử lý C là bộ tiền xử lý macro (cho phép bạn xác định macro) biến đổi chương trình của bạn trước khi nó được biên dịch. Các biến đổi này có thể là bao gồm tệp tiêu đề, mở rộng macro, v.v.

Tất cả các chỉ thị tiền xử lý đều bắt đầu bằng một #ký hiệu. Ví dụ,

#define PI 3.14

Một số cách sử dụng phổ biến của bộ tiền xử lý C là:

Bao gồm Tệp Tiêu đề: #include

Bộ #includetiền xử lý được sử dụng để đưa các tệp tiêu đề vào chương trình C. Ví dụ,

#include <stdio.h>

Đây, stdio.hlà một tệp tiêu đề. Các #includechỉ thị tiền xử lý thay thế dòng trên với các nội dung của stdio.htập tin tiêu đề.

Đó là lý do tại sao bạn cần phải sử dụng #include <stdio.h>trước khi bạn có thể sử dụng các chức năng như scanf()và printf().

Bạn cũng có thể tạo tệp tiêu đề của riêng mình chứa khai báo hàm và đưa nó vào chương trình của bạn bằng cách sử dụng chỉ thị tiền xử lý này.

#include "my_header.h"

Bạn đã tìm hiểu thêm về cách sử dụng tệp tiêu đề .

Macro sử dụng #define

Macro là một đoạn mã được đặt tên. Bạn có thể xác định một macro trong C bằng cách sử dụng #definechỉ thị tiền xử lý.

Đây là một ví dụ.

#define c 299792458  // speed of light

Ở đây, khi chúng ta sử dụng c trong chương trình của mình, nó được thay thế bằng 299792458.

Ví dụ 1: #define bộ tiền xử lý

#include <stdio.h>
#define PI 3.1415

int main()
{
    float radius, area;
    printf("Enter the radius: ");
    scanf("%f", &radius);

    // Notice, the use of PI
    area = PI*radius*radius;

    printf("Area=%.2f",area);
    return 0;
}

Chức năng như Macro

Bạn cũng có thể xác định macro hoạt động theo cách tương tự như lệnh gọi hàm. Đây được gọi là macro giống hàm. Ví dụ,

#define circleArea(r) (3.1415*(r)*(r))

Mỗi khi chương trình gặp phải circleArea(argument), nó được thay thế bằng (3.1415*(argument)*(argument)).

Giả sử, chúng ta đã chuyển 5 làm đối số sau đó, nó sẽ mở rộng như bên dưới:

circleArea(5) expands to (3.1415*5*5)

Ví dụ 2: Sử dụng bộ tiền xử lý #define

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)

int main() {
    float radius, area;

    printf("Enter the radius: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);

    return 0;
}

Truy cập trang này để tìm hiểu thêm về macro và #define bộ tiền xử lý .

Biên soạn có điều kiện

Trong lập trình C, bạn có thể hướng dẫn bộ tiền xử lý có bao gồm một khối mã hay không. Để làm như vậy, các chỉ thị có điều kiện có thể được sử dụng.

Nó tương tự như một iftuyên bố với một điểm khác biệt chính.

Câu iflệnh được kiểm tra trong thời gian thực thi để kiểm tra xem một khối mã có nên được thực thi hay không trong khi, các điều kiện được sử dụng để bao gồm (hoặc bỏ qua) một khối mã trong chương trình của bạn trước khi thực thi.


Sử dụng có điều kiện

  • use different code depending on the machine, operating system
  • compile same source file in two different programs
  • to exclude certain code from the program but to keep it as reference for future purpose

Làm thế nào để sử dụng điều kiện?

Để sử dụng có điều kiện, #ifdef#if#defined#elsevà #elseifchỉ được sử dụng.

#ifdef Chỉ thị

#ifdef MACRO     
   // conditional codes
#endif

Ở đây, các mã điều kiện chỉ được đưa vào chương trình khi MACRO được xác định.

#if, #elif và #else Chỉ thị

#if expression
   // conditional codes
#endif

Ở đây, biểu thức là một biểu thức kiểu số nguyên (có thể là số nguyên, ký tự, biểu thức số học, macro, v.v.).

Các mã điều kiện chỉ được đưa vào chương trình nếu biểu thức được đánh giá là giá trị khác 0.

#elseChỉ thị tùy chọn có thể được sử dụng với #ifchỉ thị.

#if expression
   conditional codes if expression is non-zero
#else
   conditional if expression is 0
#endif

Bạn cũng có thể thêm điều kiện lồng nhau để #if...#elsesử dụng#elif

#if expression
    // conditional codes if expression is non-zero
#elif expression1
    // conditional codes if expression is non-zero
#elif expression2
    // conditional codes if expression is non-zero
#else
    // conditional if all expressions are 0
#endif

#defined

Toán tử đặc biệt #defined được sử dụng để kiểm tra xem một macro nhất định có được xác định hay không. Nó thường được sử dụng với chỉ thị #if .

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
  // codes

Macro được xác định trước

Dưới đây là một số macro được xác định trước trong lập trình C.

MacroValue
__DATE__A string containing the current date
__FILE__A string containing the file name
__LINE__An integer representing the current line number
__STDC__If follows ANSI standard C, then the value is a nonzero integer
__TIME__A string containing the current date.

Ví dụ 3: Nhận thời gian hiện tại bằng __TIME__

Chương trình sau đây xuất ra thời gian hiện tại bằng cách sử dụng __TIME__macro.

#include <stdio.h>
int main()
{
   printf("Current time: %s",__TIME__);   
}

Đầu ra

Current time: 19:54:39








Gõ tìm kiếm nhanh...