先丢出一个炸弹:
#define kCurrentVersion [[[UIDevice currentDevice] systemVersion] intValue]
#if kCurrentVersion >= 9
#endif
问题:
invalid token at start of a preprocessor expression
大概意思:#if 的符号在预处理时无效
原因分析:
kCurrentVersion这个宏定义,要等到代码运行才会得到版本号,而#if属于条件编译,是在预处理阶段进行的。在预编译阶段,代码并未运行,无法获取到设备版本号,而导致在条件编译中kCurrentVersion并不是一个常量而出现问题。
解决方式:在条件编译中不使用代码运行时才生成的量即可。
如:
#define kCurrentVersion 9
编译、连接、运行 定义描述
先丢出一个炸弹:#define kCurrentVersion [[[UIDevice currentDevice] systemVersion] intValue]#if kCurrentVersion >= 9#endif问题:invalid token at start of a preprocessor expression 大概意思:#if 的符号在预处理时无效原因分析: kCu
1、如何区分
宏定义
中的“宏名称”和“宏字符串”?对于带参数的宏又该注意什么?
在
宏定义
中,“宏名称”和“宏字符串”是通过“空格”来区分的。
编译
器在处理时
宏定义
时,首先从“#define”后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为“宏名称”,确定好“宏名称”之后,本行的所有其他字符串都为“宏字符串”。图示:#define + N个空格(1 < N) + 宏名称(中间没有空格) + N个空格(1 < N) + 宏字符串(直到本行结束)。这里讲到的都是一行之内的
宏定义
,如果跨越多行则用“\”字符进行“续行”,本质上可以当做一行来对待。
对于“带参数宏”,宏名称和“(
#define XX_VERSION_MAJOR 1 // 主
版本
号
#define XX_VERSION_MINOR 1 // 副
版本
号
#define XX_VERSION_REVISION 1 // 修正...
心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,谦虚,自律,反思,成长,还算是比较正能量的博主,公益免费传播……内心特别想在AI界做出一些可以推进历史进程影响力的东西(兴趣使然,有点小情怀,也有点使命感呀)……
05-26
Fisher
判别
分析是一种常用的分类方法,通常用于将数据集分为两个或多个类别。在R语言中,可以
使用
`lda`函数来进行Fisher
判别
分析。
首先,我们需要准备数据集,假设我们有一个包含两个变量和一个类别变量的数据集,其中类别变量有两个类别。
# 生成示例数据
x1 <- rnorm(50, mean = 0, sd = 1)
x2 <- rnorm(50, mean = 1, sd = 1)
y <- rep(c("A", "B"), each = 25)
data <- data.frame(x1, x2, y)
接下来,我们可以
使用
`lda`函数来进行Fisher
判别
分析,并
使用
`predict`函数来对新数据进行分类。
# 加载MASS包
library(MASS)
# 进行Fisher
判别
分析
fit <- lda(y ~ x1 + x2, data = data)
# 对新数据进行分类
newdata <- data.frame(x1 = c(0, 1), x2 = c(1, 0))
predict(fit, newdata)
这里的`lda`函数中,`y`表示类别变量,`x1`和`x2`表示用于分类的变量。`predict`函数中,`newdata`表示新的数据集,可以根据模型进行分类。