token ""Hi3531A"" is not valid in preprocessor expressions #define SOC_TYPE "Hi3531A"
时间: 2023-09-11 17:06:34 浏览: 69
这个问题是由于在预处理器表达式中使用了无效的标记导致的。在这种情况下,您将 "Hi3531A" 分配给了 SOC_TYPE 宏。要解决这个问题,您需要确保在预处理器表达式中使用的标记是有效的。
通常,标记只能包含字母、数字和下划线,并且不能以数字开头。请检查您使用的标记是否满足这些条件。如果不满足条件,您可能需要更改标记的命名方式。
在这种情况下,您可以考虑使用有效的标记来定义 SOC_TYPE 宏,例如:
#define SOC_TYPE_HI3531A
这样,您就可以在预处理器表达式中使用 SOC_TYPE_HI3531A 了。
相关问题
C++ #define assign _token(case_label)
这个代码片段定义了一个宏 `assign`,它的定义中包含了另一个宏 `_token` 和 `case_label`,具体的作用如下:
当使用 `assign` 宏时,会将 `case_label` 作为参数传递给 `_token` 宏,然后将 `_token` 宏的结果作为代码的一部分,用于给变量或变量的成员赋值。这个宏可以用于 switch-case 语句中,用于给不同的变量或变量的成员赋不同的值。
举个例子:
```c++
#include <iostream>
#define _token(x) #x
#define assign _token(case_label)
int main()
{
int a = 0;
int b = 0;
int case_label = 1;
switch (case_label)
{
case 1:
a = assign; // 相当于 a = "case_label"
break;
case 2:
b = assign; // 相当于 b = "case_label"
break;
default:
break;
}
std::cout << "a = " << a << std::endl; // 输出:a = case_label
std::cout << "b = " << b << std::endl; // 输出:b =
return 0;
}
```
在上面的例子中,当 case_label 的值是 1 时,会执行 `a = assign;`,这相当于执行 `a = "case_label";`。所以最后输出的结果是 `a = case_label`。当 case_label 的值是 2 时,会执行 `b = assign;`,这相当于执行 `b = "case_label";`,所以最后输出的结果是 `b = `(空字符串)。
C++ #define assign_token(case_label)
这个代码片段定义了一个宏 `assign_token`,它的定义中包含了另一个宏 `_token` 和 `case_label`,具体的作用如下:
当使用 `assign_token` 宏时,会将 `case_label` 作为参数传递给 `_token` 宏,然后将 `_token` 宏的结果作为字符串字面量,用于给变量或变量的成员赋值。这个宏可以用于 switch-case 语句中,用于给不同的变量或变量的成员赋不同的字符串字面量值。
举个例子:
```c++
#include <iostream>
#define _token(x) #x
#define assign_token(x) _token(x)
int main()
{
std::string str1;
std::string str2;
int case_label = 1;
switch (case_label)
{
case 1:
str1 = assign_token(case_label); // 相当于 str1 = "1"
break;
case 2:
str2 = assign_token(case_label); // 相当于 str2 = "2"
break;
default:
break;
}
std::cout << "str1 = " << str1 << std::endl; // 输出:str1 = 1
std::cout << "str2 = " << str2 << std::endl; // 输出:str2 =
return 0;
}
```
在上面的例子中,当 case_label 的值是 1 时,会执行 `str1 = assign_token(case_label);`,这相当于执行 `str1 = "1";`。所以最后输出的结果是 `str1 = 1`。当 case_label 的值是 2 时,会执行 `str2 = assign_token(case_label);`,这相当于执行 `str2 = "2";`,所以最后输出的结果是 `str2 = `(空字符串)。