将预处理器变量更改为运行时因变量

时间:2014-03-30 19:41:44

标签: c global-variables const c-preprocessor

我有以下代码:

#include <stdio.h>
#include <stdarg.h>

#define A 10
#define B 20
#define C 30

int m = A + B;
const int n = A + B + C;

void foo1(int x) {
    m += A + B + x;
}

void foo2(int x = B, int y = C, ...) {
    m += B + C + x;
    if (m > n) foo1(y);
    /* Some statements here */
}
/* And MUCH MORE functions and some global variables like these here. */

int main() {
    /* Some statements here */
    return 0;
}

我希望这些ABC作为运行时因变量,将在main()函数中处理(无#define)。在不更改大部分代码的情况下,将预处理程序变量更改为运行时相关变量的最佳方法是什么? (假设整个代码超过1000行。)

1 个答案:

答案 0 :(得分:0)

由于没有人回答我的问题,我终于根据我的实际工作回答了这个问题。虽然我不确定是否有更好的方法可以将预处理器变量更改为运行时因变量。

治愈情况:

  • 首先,在代码中取消注释必要的“#define”语句。这将突出显示与预处理器变量相关的变量中的错误(例如,通过Visual Studio Intellisense)。
  • 然后在 main 函数(或其他函数)中移动突出显示的变量赋值。您不需要在函数内移动变量,而是在所有函数之外移动(这意味着全局变量)。如果可能,请为任务使用“查找和替换”,“正则表达式”,宏自动化。
  • 然后全局声明预处理器变量名。常量变量将消失,但我认为没有选择。
  • 最后,检查代码中的错误并在必要时进行调试。

预防情况:

预防胜于治疗。应该保持精心策划的项目。如果运行时因变量的可能性很大,请不要使用预处理器语句。

问题代码的最终代码:

#include <stdio.h>
#include <stdarg.h>

/* Preprocessor variable names as global variables */
int A, B, C;

/* Assignments are moved */
int m;
int n;  /* no more constant */

void foo1(int x) {
    m += A + B + x;
}

void foo2(int x = B, int y = C, ...) {
    m += B + C + x;
    if (m > n) foo1(y);
    /* Some statements here */
}
/* And MUCH MORE functions and some global variables like these here. */

int main() {
    /*
    A, B, C actually runtime dependant.
    But for simplicity, they are hardcoded here.
    */
    A = 10;
    B = 20;
    C = 30;

    /* Assignment of global variables */
    m = A + B;
    n = A + B + C;

    /* Some statements here */
    return 0;
}