C++中的魔鬼数字

在编程中,魔鬼数字(magic numbers)是指代码中直接使用的未经解释的常量数字,这些数字通常没有明确的含义,可能会使代码变得难以理解、维护或扩展。魔鬼数字的存在会让人难以判断这些数字的用途或来源,因此在代码中通常建议避免使用魔鬼数字,而是用具名的常量或宏来代替。

在你提供的示例代码中,以下几个数字可以被认为是魔鬼数字

魔鬼数字示例

  1. 3:表示创建的线程数量。

    • 原代码: const int numThreads = 3;
    • 解释:这里 3 表示程序中要创建的线程数量。为了使代码更具可读性,可以将这个数字替换为一个具名的常量。
  2. 2:用于 sleep(2),表示线程要休眠2秒。

    • 原代码: sleep(2);
    • 解释:这个数字表示线程的休眠时间,直接使用会让人困惑为什么选择2秒。可以用一个具名的常量来替代它,以解释这段休眠的目的。

改进后的代码

为了消除魔鬼数字,可以将它们替换为具名常量或宏,以增强代码的可读性和可维护性:

#include <iostream>
#include <pthread.h>
#include <unistd.h>  // sleep 函数

// 定义具名常量
const int NUM_THREADS = 3;           // 线程数量
const int THREAD_SLEEP_DURATION = 2; // 每个线程休眠的秒数

// 线程执行的函数
void* threadFunc(void* arg) {
    int* id = static_cast<int*>(arg);  // 传入的参数类型转换
    std::cout << "Thread " << *id << " is running." << std::endl;
    sleep(THREAD_SLEEP_DURATION);  // 使用具名常量代替魔鬼数字
    std::cout << "Thread " << *id << " has finished." << std::endl;
    return nullptr;
}

int main() {
    pthread_t threads[NUM_THREADS];  // 使用具名常量代替魔鬼数字
    int threadArgs[NUM_THREADS];

    // 创建多个线程
    for (int i = 0; i < NUM_THREADS; ++i) {
        threadArgs[i] = i + 1;  // 为每个线程传递不同的参数
        if (pthread_create(&threads[i], nullptr, threadFunc, &threadArgs[i]) != 0) {
            std::cerr << "Error creating thread " << i + 1 << std::endl;
            return 1;
        }
    }

    // 等待所有线程完成
    for (int i = 0; i < NUM_THREADS; ++i) {
        if (pthread_join(threads[i], nullptr) != 0) {
            std::cerr << "Error joining thread " << i + 1 << std::endl;
            return 1;
        }
        std::cout << "Thread " << i + 1 << " has joined." << std::endl;
    }

    std::cout << "All threads have completed." << std::endl;
    return 0;
}

改进的地方:

  1. NUM_THREADS: 代替了数字 3,表示线程的数量。这样如果未来需要更改线程数量,只需要修改这个常量即可,增强了代码的可扩展性。
  2. THREAD_SLEEP_DURATION: 代替了 sleep(2) 中的 2,明确表示线程的休眠时间,这使代码更加清晰,并且能够解释为什么线程需要休眠。

这样做的好处:

  • 可读性:具名常量提供了上下文信息,告诉代码的读者这些数字的含义。
  • 可维护性:如果需要更改这些常量的值,只需修改一处,减少了错误的可能。
  • 可扩展性:当需要扩展代码时,使用具名常量可以让代码更容易修改和理解。

避免魔鬼数字是编程中的一个重要实践,可以显著提高代码的质量。

posted @ 2024-10-15 23:15  海_纳百川  阅读(62)  评论(0编辑  收藏  举报
本站总访问量