我正在处理一个vs项目,在Project-> Properties页面的c / c ++-> preprocessor下,我有一个预处理程序deff“ $(USERNAME)TEST;”。我的用户名是“ bob.p”。
在构建时,我收到一个智能提示错误,提示“命令行错误:无效的宏定义:bob.pTEST”。删除预处理器定义或不带点的硬编码“ bobpTest”即可解决此问题。有什么方法可以解决此问题而不删除预处理器定义吗?即将其标记为原义?尝试使用单引号和双引号,但都无效。
编辑:
问题是我的Windows用户名是“ bob.p”,而我正在处理的Visual Studio项目具有“ $(USERNAME)TEST”作为预处理程序定义。我的用户名中有一个点导致错误。有没有办法我可以本地更改$(USERNAME)的值以删除点,或在定义中添加转义序列以转义该点?
答案 0 :(得分:0)
预处理器符号的名称中不能带有点(请记住,该符号与#define
相同),但是您可以这样做:USERNAME=$(USERNAME)TEST;
通过处理预处理器的方式,在源中使用这样的符号(作为字符串)会有点棘手,要将值用作字符串,您将需要使用预处理器字符串化运算符(#):>
#define STR_(x) #x
#define STR(x) STR_(x)
printf("My preprocesor symbol: %s\r\n", STR(USERNAME));