gpt4 book ai didi

c - 为什么这个 C 宏会导致语法错误?

转载 作者:行者123 更新时间:2023-12-02 05:43:54 25 4
gpt4 key购买 nike

这是我第一次在 C 语言中使用宏,我正在尝试用宏替换我通常会放入函数中的大部分代码。这是中断的一部分,将经常使用,因此我需要尽可能多地优化它。阅读文档后,我发现编译器不支持函数内联,我想避免函数调用开销。

代码本身将数据发送到串行输入并行输出移位寄存器,据我所知,没有比这更短的方法来编写我需要的代码了。

我使用的是 C18 编译器 3.41 版和 MPLAB X IDE。

下面是我在函数形式中使用的代码:

void first_one(void)
{
//3 invisible zeroes
LATBbits.LATB1=0; //data set to zero

LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;

LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;

LATBbits.LATB0=1;//third clock
LATBbits.LATB0=0;
//end of invisible zeroes

//two visible zeroes
LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;

LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;
//end of two visible zeroes

LATBbits.LATB1=1;//Data is now one

LATBbits.LATB0=1;
LATBbits.LATB0=0;
//one

LATBbits.LATB1=0;//Data is now zero

LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;

LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;

//after this, everything should be in place
LATBbits.LATB0=1;
LATBbits.LATB0=0;
}

我已经把这个函数变成了这个宏:

#define first_one() {  \
\
LATBbits.LATB1=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB1=1;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB1=0;\
^^^ The syntax error is here!
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
}

那我做错了什么?

更新:我删除了评论,现在在不同的位置收到语法错误。

最佳答案

检查 \ 标记后没有空格,一些编译器会为此发出编译错误。

关于c - 为什么这个 C 宏会导致语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com