Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中括号的使用_C_Parentheses - Fatal编程技术网

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)的不安全程序员的问题相同来自函数等。括号只是杂乱无章的东西,完全没有添加任何内容。@Zilog80
return
是一个跳转语句。它不接受参数,但可以选择一个表达式。这是唯一一个使用表达式的跳转语句,那么你到底想与什么保持一致呢?如果您试图与选择语句保持一致,我打赌您不会编写例如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)的问题相同
来自函数等。括号只是杂乱无章的,完全没有添加任何内容。@Zilog80
return
是一个跳转语句。它不接受参数,但可以选择一个表达式。它是唯一一个接受表达式的跳转语句。那么,您到底想与什么保持一致?如果您想与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
可用于连接运算符
##<