c语言中括号的使用
关于括号的使用,以下两种说法有什么不同?(没有指针左右)c语言中括号的使用,c,parentheses,C,Parentheses,关于括号的使用,以下两种说法有什么不同?(没有指针左右) 宏在表达式中通常用作操作数时没有区别 但是,请注意,在以下方面存在差异: #define A 4 + 7 #define B (5 + 3) 如果将宏用作 int a = 6 * A; // 6 * 4 + 7 ==> 24 + 7 int b = 6 * B; // 6 * (5 + 3) ==> 6 * 8 根据经验:在宏中使用和滥用括号 当括号紧跟在宏名称之后时,它是一个类似于宏的函数 宏在表达式中通常用作操作数时没
宏在表达式中通常用作操作数时没有区别 但是,请注意,在以下方面存在差异:
#define A 4 + 7
#define B (5 + 3)
如果将宏用作
int a = 6 * A; // 6 * 4 + 7 ==> 24 + 7
int b = 6 * B; // 6 * (5 + 3) ==> 6 * 8
根据经验:在宏中使用和滥用括号
当括号紧跟在宏名称之后时,它是一个类似于宏的函数
宏在表达式中通常用作操作数时没有区别 但是,请注意,在以下方面存在差异:
#define A 4 + 7
#define B (5 + 3)
如果将宏用作
int a = 6 * A; // 6 * 4 + 7 ==> 24 + 7
int b = 6 * B; // 6 * (5 + 3) ==> 6 * 8
根据经验:在宏中使用和滥用括号
当括号紧跟在宏名称之后时,它是一个类似于宏的函数
好吧,
()
在一个宏中只有一个文本或常量时应该没有区别。但是,例如,您应该使用#define FOO(BAR+BAZ)
来代替#define FOO BAR+BAZ
,以避免由于运算符优先级而引起的任何令人不快的意外。不安全的新手程序员通常喜欢在所有内容及其母亲周围加括号,因为他们不确定语言的工作方式。这与编写return(0)的不安全程序员的问题相同代码>来自函数等。括号只是杂乱无章的东西,完全没有添加任何内容。@Zilog80return
是一个跳转语句。它不接受参数,但可以选择一个表达式。这是唯一一个使用表达式的跳转语句,那么你到底想与什么保持一致呢?如果您试图与选择语句保持一致,我打赌您不会编写例如for循环之类的for(int(I)=(0);((I)@Zilog80无论您认为return
应该是什么,它在形式语言语法C17 6.8.6中被列为跳转语句。有很多东西“函数的一部分”,例如函数参数。如果您编写函数如intf(int(x),int(y))
那么我就明白你的意思了,否则我就不明白了。现在如果你有return
这样的函数,那么这就不仅仅是一个样式问题,而是一个非常可疑的程序设计问题…@Zilog80:如果你有一些“处理返回操作的参数化宏”,比如ERROR\u return(一些参数)
或FUNKY_RETURN(无论什么);
保持一致性的方法是使用宏普通_RETURN(value);
或RETURN(value);
,而不是编写RETURN(value)然后,在所有这些宏中,你可以有一个简单的返回值;
,这是自然法则和世界上一切正确和美好的法则所希望的。好吧,()
在一个宏中,当它只是一个文字或常量时,应该没有任何区别。但是,你应该做#定义FOO(BAR+BAZ)
而不是#定义FOO-BAR+BAZ
,以避免因运算符优先级而产生任何令人不快的意外。不安全的新手程序员通常喜欢在所有内容及其母内容周围加括号,因为他们不确定语言如何工作。这与不安全的程序员编写返回(0)的问题相同
来自函数等。括号只是杂乱无章的,完全没有添加任何内容。@Zilog80return
是一个跳转语句。它不接受参数,但可以选择一个表达式。它是唯一一个接受表达式的跳转语句。那么,您到底想与什么保持一致?如果您想与sel保持一致section语句,我敢打赌你不会编写像for(int(I)=(0);((I)@Zilog80)这样的for循环,你觉得return
应该是什么并不重要,它在形式语言语法C17 6.8.6中被列为跳转语句,句号。函数中有很多东西”的一部分“,比如函数参数。如果你编写的函数像intf(int(x),int(y));
那么我可以理解你的观点,否则就看不到了。现在如果你有return
内部函数像宏,那么这不再是一个风格问题,而是一个非常可疑的程序设计问题…@Zilog80:如果你有一些“处理返回操作的参数化宏”,如ERROR\u return(一些,参数);
或FUNKY\u return(无论什么);
,则保持一致性的方法是使用宏NORMAL\u return(value);
或return(value);
,而不是编写return(value)
。然后,在所有这些宏中,您可以有一个简单的返回值;
,这是自然法则和世界上所有正确和美好的事物所希望的。也许您也应该描述宏扩展(#define FUNC(PARAM)PARAM+7
)?“没有任何区别”不正确。UART2_-BAUD
可用于连接运算符##
形成标识符的情况。UART1_-BAUD
不能。我认为最好编写类似“宏通常用作表达式中的操作数时没有区别”这样的内容避免细节。与##
一起使用并不是唯一的区别。另一个区别是如果UART1\u波特
将是有效语法,而如果UART2\u波特
将不有效。另一个区别是Foo(Bar UART1\u波特)如果Bar
是一个类似宏的函数(因为Bar(460800)
形成一个类似宏调用的函数),则在替换宏Foo
后,将导致Bar UART1\u BAUD
被宏替换,但Foo(Bar UART2\u BAUD)
不会。(Bar 9600
不调用宏)。可能还有其他的。也许您也应该描述宏扩展(#define FUNC(PARAM)PARAM+7
)?“没有任何区别”是不正确的。UART2\u BAUD
可用于连接运算符##<