必须有办法做到这一点......
我有一个头文件,version.h有一行......
#define VERSION 9
并且一些文件使用定义的VERSION值作为整数。 没关系。
在不改变定义VERSION的方式的情况下,我需要构建一个 初始化"什么"包含该值的字符串, 所以我需要这样的东西......
char *whatversion = "@(#)VERSION: " VERSION;
显然这不会编译,所以不知怎的,我需要得到一个
VERSION的预处理值的字符串基本上给出了这个......
char *whatversion = "@(#)VERSION: " "9";
有什么想法吗? 这可能吗?
答案 0 :(得分:5)
它不是数据类型,而是令牌。一团文字。
K & R
谈论连接值:
The preprocessor operator ## provides a way to concatenate actual arguments
during macro expansion. If a parameter in the replacement text is adjacent
to a ##, the parameter is replaced by the actual argument, the ## and
surrounding white space are removed, and the result is re-scanned. For example,
the macro paste concatenates its two arguments:
#define paste(front, back) front ## back
so paste(name, 1) creates the token name1.
- 尝试一下。在到达char *version=
答案 1 :(得分:0)
在宏中,您可以使用“stringify”运算符(#
),它将完全按照您的要求执行:
#define STR2(x) #x
#define STR(x) STR2(x)
#define STRING_VERSION STR(VERSION)
#define VERSION 9
#include <stdio>
int main() {
printf("VERSION = %02d\n", VERSION);
printf("%s", "@(#)VERSION: " STRING_VERSION "\n");
return 0;
}
是的,你需要宏调用中的双重间接。没有它,您将获得"VERSION"
而不是"9"
。
您可以在gcc manual中详细了解这一点(尽管它是完全标准的C / C ++)。