我有以下代码:
#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;
}
我希望这些A
,B
,C
作为运行时因变量,将在main()
函数中处理(无#define
)。在不更改大部分代码的情况下,将预处理程序变量更改为运行时相关变量的最佳方法是什么? (假设整个代码超过1000行。)
答案 0 :(得分:0)
由于没有人回答我的问题,我终于根据我的实际工作回答了这个问题。虽然我不确定是否有更好的方法可以将预处理器变量更改为运行时因变量。
治愈情况:
预防情况:
预防胜于治疗。应该保持精心策划的项目。如果运行时因变量的可能性很大,请不要使用预处理器语句。
问题代码的最终代码:
#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;
}