1

我们的代码在 printf 中硬编码了至少 20 个不同文件中的版本信息,例如: printf("Software version v11.2");这意味着每次有更新时都要更改 20 个文件。

相反,我希望在 common.h 文件中使用宏并将其#include,这样版本更新只是更改了一个宏,仅此而已。

我试过类似的东西:

#include <stdio.h>
#define VERSION "v11.2"
int main()
{
  printf("Trying to print macro: ", VERSION);
}

但是这种“字符串”“字符串”风格在 Java 中而不是在 C 中有效。任何想法如何完成它?

我们将使用 gcc 进行编译。

注意:宏也用于一些典型的 *.rc 文件中,我们不能在其中使用变量,并且在某些地方这些 rc 文件使用 SQL 查询进行解析。所以我们不能使用像 char ver[]="v11.2" 这样的变量

4

4 回答 4

11

这里有两种可能的解决方案。

#include <stdio.h>
#define VERSION "v11.2"
int main()
{
  // Let printf insert the string when doing the output.
  printf("Trying to print macro: %s\n", VERSION);
  // Let the compiler concatenate the strings.
  puts("Trying to print macro: " VERSION);
  // Let the compiler concatenate the strings, can be assigned to a variable.
  const char buf[] = "Trying to print macro: " VERSION;
  puts(buf);
}
于 2012-08-09T09:35:22.700 回答
0
printf("Trying to print macro: %s", VERSION);
于 2012-08-09T09:35:14.097 回答
0

Is 是一个字符串,%s应该可以工作。

int main()
{
  printf("Trying to print macro: %s", VERSION);
}
于 2012-08-09T09:35:18.940 回答
0

尝试这个

#define PRINT(format,args...)\
\
    do { \
        printf(" your data...");\
        } \
    } while(0)
于 2012-08-09T10:23:03.313 回答