taojie 发表于 2014-9-7 18:23:48

解疑 c 编程 反斜杠 的用法

今日在查看一下一个网友的程序,看到如图, 里面的反斜杠用法从来没有见过,希望大家指点一下,多谢!

#ifndef __LED_H
#define        __LED_H

#include "stm32f40x.h"
#define ON0
#define OFF 1

#define LED1(a)        if (a)        \
                                        GPIO_SetBits(GPIOB,GPIO_Pin_5);\
                                        else                \
                                        GPIO_ResetBits(GPIOB,GPIO_Pin_5)

#define LED2(a)        if (a)        \
                                        GPIO_SetBits(GPIOB,GPIO_Pin_6);\
                                        else                \
                                        GPIO_ResetBits(GPIOB,GPIO_Pin_6)

#define LED3(a)        if (a)        \
                                        GPIO_SetBits(GPIOB,GPIO_Pin_7);\
                                        else                \
                                        GPIO_ResetBits(GPIOB,GPIO_Pin_7)

void LED_GPIO_Config(void);

#endif

lcofjp 发表于 2014-9-7 18:28:32

不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的内容仿佛就在反斜杠处。也就是C语言编译器解析出来的是一行。
这样用是因为宏定义只在当前行有效。

oner 发表于 2014-9-7 18:41:57

C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

taojie 发表于 2014-9-7 18:45:44

oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的,

taojie 发表于 2014-9-7 18:48:36

oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,续行符这个,结合在宏定义的时候,就是第一次, 难道这不算技术问题啊

yuyu87 发表于 2014-9-7 18:51:14

楼上来混飞币的啊?

taojie 发表于 2014-9-7 18:52:06

lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...

多谢你的解疑, 初次遇到 宏定义 与 续行符号的结合用法,飞思单片机也有C 宏定义的吧,这也算水,如果人人都会的话,就不用发帖了

xujihu 发表于 2014-9-7 18:53:13

taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...

去掉反斜杠,内容要放在同一行的

yzb1019 发表于 2014-9-7 18:53:20

建议好好学学C和指针,当然不必花时间去看完一本书,要勤翻书,这是个人想法啊。还有论坛了就有好多C语言的书籍

taojie 发表于 2014-9-7 19:00:42

xujihu 发表于 2014-9-7 18:53
去掉反斜杠,内容要放在同一行的

嗯,说得对,要放在同一行的,编译就通过了, 但是阅读起来不太 清晰的,宏定义就清晰了,要不好容易 两者分离理解了,多谢!
#define ON0
#define OFF 1

#define LED1(a)        if (a)        GPIO_SetBits(GPIOB,GPIO_Pin_5);else        GPIO_ResetBits(GPIOB,GPIO_Pin_5)

#define LED2(a)        if (a)        GPIO_SetBits(GPIOB,GPIO_Pin_6);else        GPIO_ResetBits(GPIOB,GPIO_Pin_6)

#define LED3(a)        if (a)        GPIO_SetBits(GPIOB,GPIO_Pin_7);else        GPIO_ResetBits(GPIOB,GPIO_Pin_7)

void LED_GPIO_Config(void);

#endif

凌海滨 发表于 2014-9-7 19:02:34

宏定义里面 隔行连续

oner 发表于 2014-9-7 19:03:10

taojie 发表于 2014-9-7 18:48
如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,续行符这个,结合在宏定义的时候,就是第一 ...

不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语言里以反斜杠(\)表示续行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格。

taojie 发表于 2014-9-7 19:19:14

oner 发表于 2014-9-7 19:03
不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...

但是注意:反斜杠之后不能有空格。

多谢,问题解决!

fengyunyu 发表于 2014-9-7 19:40:57

ls各位的讨论,把这个“知识点”讲清楚了。

ddz123abcdef 发表于 2014-9-7 19:46:57

以前经常以库的头文件里看到,不知怎么回事,楼上几位给解释清楚了

68336016 发表于 2014-9-7 19:55:07

不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。

cslrd 发表于 2014-9-7 20:02:19

我理解是续行

剑舞 发表于 2014-9-7 20:12:41

宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法

zzj0329 发表于 2014-9-7 20:31:22

大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法

vampirejing 发表于 2014-9-7 20:38:53

毫无疑问,续行符{:loveliness:}

franki 发表于 2014-9-7 20:40:19

这是连接符    C语言里面有讲到

WaterToSea 发表于 2014-9-7 20:43:32

连接符,增强了可读性!

zhaoxukiller 发表于 2014-9-7 20:45:54

隔行继续   类似英文中的 -

weichao4808335 发表于 2014-9-7 20:55:39

换行!!!

taojie 发表于 2014-9-7 20:58:13

剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...

你说得对, 宏定义必须放同一行,中秋快乐!

huangzzjy22 发表于 2014-9-7 21:00:15

中秋快乐

tim 发表于 2014-9-7 21:04:59

根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论

taojie 发表于 2014-9-7 21:05:56

68336016 发表于 2014-9-7 19:55
不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。 ...

多谢体谅,这个我实在不懂就提出来问的,解决一个问题就少一个路障,中秋快乐!

taojie 发表于 2014-9-7 21:07:23

tim 发表于 2014-9-7 21:04
根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论 ...

本来这个程序就是我打算移植过来 K20板子运行的

tim 发表于 2014-9-7 21:09:35

taojie 发表于 2014-9-7 21:07
本来这个程序就是我打算移植过来 K20板子运行的

不用解释啦,别人也不傻。。。{:loveliness:}

taojie 发表于 2014-9-7 21:11:01

zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...

本想看这两日假期有空不回家,移植一个例子到飞思K20板子的,其中还遇到两个C语法问题,觉得挺精巧的,还是不提出来好了,自行消化就好了,免得有人有意见的

mq-life 发表于 2014-9-7 21:21:14

这问题到Google 上搜了吗,这里问快还是搜索的快

takashiki 发表于 2014-9-7 21:24:07

zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...

三个#号?没有见过。一个#表示生成字符串,#@表示生成字符,##表示连接,###这是栅栏,防止小猪跑出来
...在最初的C语言中表示函数的可变参数,后来有了C++,用作捕获所有异常,后来有了C99,在宏定义中定义可以表示可变参数
四个点那是::,C++中太常见了

C/C++中特别变态的转义字符??,估计绝大多数人没有见过,搞不好在字符串操作中会吃亏的。
这里列出一些:比如这样:int i = ??-1;可以编译通过,strlen("??!")等于1。
   ??=       #
   ??/       \
   ??'       ^
   ??(       [
   ??)       ]
   ??!       |
   ??<       {
   ??>       }
   ??-       ~

剑舞 发表于 2014-9-7 22:01:57

taojie 发表于 2014-9-7 20:58
你说得对, 宏定义必须放同一行,中秋快乐!

同乐,开源快乐,共享开心,让我们把阿莫的开源共享精神进行到底

NFC 发表于 2014-9-7 22:10:16

C语言接续符\

湛泸骏驰 发表于 2014-9-7 22:13:46

taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...

宏定义不用反斜杠 那就不是一行代码,必然编译不过。。

xinbadazz 发表于 2014-9-7 22:57:44

很少用,一遍尽量放在一行里面,以便于阅读。

sunrundong 发表于 2014-9-8 08:46:53

lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...

以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊!

holts2 发表于 2014-9-8 09:12:22

sunrundong 发表于 2014-9-8 08:46
以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊! ...


没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP

C语言的好资料
http://www.amobbs.com/thread-5594840-1-1.html
(出处: amoBBS 阿莫电子论坛)

zhq0571 发表于 2014-9-8 09:26:31

mark学习了

wxfje 发表于 2014-9-8 09:32:14

就是续行符,起到链接下一行的作用,续行符后面不能加注释的,加注释就编译不过

浪里白条 发表于 2014-9-8 09:36:36

续航符,不懂就问,没什么丢脸的,露珠做得对

PCBBOY1991 发表于 2014-9-8 09:41:57

oner 发表于 2014-9-7 19:03
不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...

对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有空格的吧?

wxfje 发表于 2014-9-8 09:44:30

剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...

这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的

比如这个
#define TCP_REG(pcbs, npcb)                        \
do {                                             \
    npcb->next = *pcbs;                            \
    *(pcbs) = npcb;                              \
    tcp_timer_needed();                            \
} while (0)

wxfje 发表于 2014-9-8 09:49:21

taojie 发表于 2014-9-7 20:58
你说得对, 宏定义必须放同一行,中秋快乐!

没有什么必须不必须的,就比如下面这个,你认为有错吗

/** This is the actual memory used by the pools. */
static u8_t memp_memory[MEM_ALIGNMENT - 1
#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )
#include "lwip/memp_std.h"
];

这段是lwip的源码,我第一看到这段,差点就疯掉

qs6361036 发表于 2014-9-8 10:06:25

连接符 续行符的意思,当一行写不下的时候

剑舞 发表于 2014-9-8 10:12:52

wxfje 发表于 2014-9-8 09:44
这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的

比如这个


麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符,懂得不要断章取义,不懂要谦虚,不要乱发表意见,会让人笑掉大牙的

wxfje 发表于 2014-9-8 10:21:16

剑舞 发表于 2014-9-8 10:12
麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符 ...

问题在于什么叫实在没办法,一行里面有100列叫实在没办法,还是一行有1000列叫实在没办法
我发表议论没错,我只是发表我个人的见解,我个人的理解,我没有针对您,也没有针对任何人,
如果我错了,我会改,在此给您道歉了,对不起哥们

Cavsle 发表于 2014-9-8 10:34:10

wxfje 发表于 2014-9-8 09:49
没有什么必须不必须的,就比如下面这个,你认为有错吗

/** This is the actual memory used by the pool ...

能解释一下这段程序吗?看不懂啊

oner 发表于 2014-9-8 12:02:43

PCBBOY1991 发表于 2014-9-8 09:41
对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有 ...

你的理解是正确的。

HeP028 发表于 2014-9-8 12:18:49

oner 发表于 2014-9-8 12:02
你的理解是正确的。

后面卜但不能没空格,还不能有任何东西包括注释

RainKing 发表于 2014-9-8 12:36:58

不懂就问,没啥事情,反正会有大神帮你解答的...........{:lol:}{:lol:}

qwert1213131 发表于 2014-9-8 20:55:47

楼上已经有正确答案了,续航用

nade 发表于 2014-9-8 21:09:40

看代码就猜出来

sunrundong 发表于 2014-9-9 08:12:40

holts2 发表于 2014-9-8 09:12
没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP

C语言的好资料


好的,得加紧学习了!

wuguoyan 发表于 2014-9-9 09:05:24

续行用的,楼上的已经表述很清楚了,这里就不重复叙述了,这个就是为了程序观看起来直观易懂,其实你把所有内容放在一行里面也是可以的,但是看起来就没那么爽了

chinaboy25 发表于 2014-9-9 09:19:02

这个明显来抓收入的,随便一搜就能找到!

zndz410 发表于 2014-9-9 09:56:16

这不应算水贴,任何知识有深有浅,不能说浅的知识就是水吧,经大家讨论,也可以帮助更多的坛友。对老师们也是温故知新麻。

ksn13 发表于 2014-9-9 10:33:40

换行“\”

chhaich 发表于 2014-9-9 10:47:01

我觉得这个发到其它区就不算水贴,发到飞思卡尔区就应该算水帖。

newbie 发表于 2014-9-9 10:52:13

deny 发表于 2014-9-9 10:59:48

额,基础不扎实啊

carney 发表于 2014-9-9 11:53:33

学习了,之前看到也不明觉厉,很多知识新手书上不一定看得到,有人点拨下是最好的

zhudadragon 发表于 2014-9-9 12:08:03

涨姿势了

cece_co 发表于 2014-9-9 12:30:35

断行用的啊

boyazy 发表于 2014-9-9 12:33:06

涨姿势了

lzscan 发表于 2014-9-9 19:33:34

第一是在野火的程序上看到的,是续航的作用

chervon 发表于 2014-9-9 19:39:24

有时为了看着整齐,代码中可以用括号,运算符等进行换行。
但在宏里面,没有代码中自由,而且用宏就要写明意思,所以有的宏会很长,这时不得不由续行符出现了。

hbxf 发表于 2014-9-9 20:38:13

学习了。

rcdny123 发表于 2014-9-9 21:14:47

mark            

wxfje 发表于 2014-9-9 21:42:36

newbie 发表于 2014-9-9 10:52
你这个是不同情况
这个本质是一个数组



我只是想说明C的用法太多,有时候很难判断

mypear 发表于 2014-9-9 23:52:54

续行符,其实可以一行写完的,但层次好看就用续行符。

RudeBoy 发表于 2014-9-10 00:01:45

野火的STM32教程里面LED设置就用的这个,你这个程序有可能源自野火程序,野火教程也对这一点有说明{:lol:}

wq_601840968 发表于 2014-9-10 10:49:53

续行符,编译器会自动删掉,变成一行

justdomyself 发表于 2014-9-10 10:57:28

这个应该是续行符吧      不过有的编译器貌似不加也可以续行的

hitgds 发表于 2014-9-10 11:10:32

换行,这两行就相当于写在一行里

lksvshdl 发表于 2014-9-10 14:30:32

续行符,我也是一年前才知道的

ndust 发表于 2014-9-14 10:17:22

平常写的程序都不大,还真不知道这个用法,这回学习了。

zhangchaoying 发表于 2014-9-14 12:40:12

反斜杠是续航付,只是平时少用。

busterace 发表于 2014-9-14 12:55:28

野火的库吧,续行作用

not_at_all 发表于 2014-9-14 13:03:13

wxfje 发表于 2014-9-9 21:42
我只是想说明C的用法太多,有时候很难判断

这就看你的C语言基础是否扎实了。许多都是很基础的东西。

lzl000 发表于 2014-9-14 15:45:09

这是从续航符,野火的教程中讲的很清楚啊

xiayuan 发表于 2014-9-15 19:34:41

这个不是STM32的么,貌似还是野火的

zjk 发表于 2014-9-16 11:01:26

反斜杠是续行符吧,表示连接下一行的
页: [1]
查看完整版本: 解疑 c 编程 反斜杠 的用法