目录
宏定义(Macro Definition)
宏定义使用#define
预处理指令来定义常量或宏函数。宏在预处理阶段进行替换,通常用于提高代码的可读性和简化重复性操作。
定义常量
#define PI 3.14
#define MAX_BUFFER_SIZE 1024
宏函数
宏函数可以用于定义简单的函数逻辑。
#define SQUARE(x) ((x) * (x))
int main() {
int result = SQUARE(5);
printf("Square of 5: %d\n", result); // 输出25
return 0;
}
条件编译
使用条件编译指令可以根据条件选择性地编译代码段。
#ifdef DEBUG
printf("Debug mode\n");
#endif
#ifndef MAX_BUFFER_SIZE
#define MAX_BUFFER_SIZE 2048
#endif
#if MAX_BUFFER_SIZE > 1024
printf("Buffer size is large\n");
#else
printf("Buffer size is small\n");
#endif
内存管理
C语言提供了动态内存分配和释放的函数,通过这些函数可以在运行时申请和释放内存。动态内存管理主要使用以下函数:
动态内存分配
malloc(size_t size)
:分配指定大小的内存块,返回指向该内存块的指针。calloc(size_t num, size_t size)
:分配并清零内存块,返回指向该内存块的指针。realloc(void *ptr, size_t size)
:重新分配内存块的大小,返回指向新的内存块的指针。
#include <stdlib.h>
int main() {
// 使用malloc分配内存
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
// 处理内存分配失败
printf("Memory allocation failed\n");
return 1;
}
// 使用calloc分配并清零内存
int *arr2 = (int *)calloc(5, sizeof(int));
if (arr2 == NULL) {
// 处理内存分配失败
printf("Memory allocation failed\n");
return 1;
}
// 使用realloc重新分配内存
arr = (int *)realloc(arr, 10 * sizeof(int));
if (arr == NULL) {
// 处理内存重新分配失败
printf("Memory reallocation failed\n");
return 1;
}
// 释放内存
free(arr);
free(arr2);
return 0;
}
文件操作
C语言标准库提供了一组函数用于文件操作,包括打开、关闭、读写文件等。文件操作主要通过FILE
指针和以下函数完成:
打开和关闭文件
fopen(const char *filename, const char *mode)
:以指定模式打开文件,返回指向FILE
对象的指针。fclose(FILE *stream)
:关闭文件。
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Failed to open file\n");
return 1;
}
fclose(file);
读写文件
fwrite(const void *ptr, size_t size, size_t count, FILE *stream)
:将数据写入文件。fread(void *ptr, size_t size, size_t count, FILE *stream)
:从文件读取数据。fprintf(FILE *stream, const char *format, ...)
:格式化输出到文件。fscanf(FILE *stream, const char *format, ...)
:从文件中格式化输入。fgets(char *str, int n, FILE *stream)
:从文件中读取一行。fputs(const char *str, FILE *stream)
:将字符串写入文件。
FILE *file = fopen("example.txt", "w");
if (file != NULL) {
fprintf(file, "Hello, world!\n");
fclose(file);
}
file = fopen("example.txt", "r");
if (file != NULL) {
char buffer[100];
while (fgets(buffer, 100, file) != NULL) {
printf("%s", buffer);
}
fclose(file);
}
完整示例
下面是一个包含宏定义、内存管理和文件操作的完整示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 宏定义
#define BUFFER_SIZE 256
#define SQUARE(x) ((x) * (x))
int main() {
// 使用宏函数
int result = SQUARE(5);
printf("Square of 5: %d\n", result);
// 动态内存分配
char *buffer = (char *)malloc(BUFFER_SIZE * sizeof(char));
if (buffer == NULL) {
printf("Memory allocation failed\n");
return 1;
}
strcpy(buffer, "This is a dynamically allocated string.");
printf("%s\n", buffer);
free(buffer);
// 文件操作
FILE *file = fopen("example.txt", "w");
if (file != NULL) {
fprintf(file, "Hello, file I/O!\n");
fclose(file);
}
file = fopen("example.txt", "r");
if (file != NULL) {
char line[BUFFER_SIZE];
while (fgets(line, BUFFER_SIZE, file) != NULL) {
printf("%s", line);
}
fclose(file);
}
return 0;
}