任何人都可以解释
的内容 #define something (54)
意思?为什么54在支架内?
答案 0 :(得分:4)
#define something (54)
告诉C预处理器在实际编译代码之前用“(54)”替换任何匹配“something”的文本。
您经常会在( )
周围看到使用#define
的原因是,在某些情况下,当#defined
文本被替换时,它会阻止替换的文本出现不良或未定义的行为变成一个更大的表达。这种不利影响可能是运营商优先权等的变化。
答案 1 :(得分:4)
一般来说,将任何#define语句放在括号内是个好主意。这是一个好习惯,大多数日常程序员都养成良好的习惯。
例如:
#define TWO_PLUS_ONE 2 + 1
如果我这样使用它:
3 * TWO_PLUS_ONE
我希望看到答案为9,但是由于运算符优先级,计算出的答案将是7.有几十个极端情况你可以找到这样的(见http://www.gimpel.com/html/bugs.htm)。这就是C ++程序员尖叫的原因,“宏是邪恶的!”。但我们是C程序员,我们是精英,我们并不害怕。
同样的例子:
#define TWO_PLUS_ONE (2 + 1)
这将在所有情况下给出预期的结果。
大多数程序员希望他们的实践适用于所有情况,因此易于记忆,易于练习且易于操作。所以在
的简单情况下#define SOMETHING (54)
做吧。这是个好主意。学会成为团队的一员,他们正在努力帮助您。顺便说一句,接下来他们会说,“它应该真的是(54u)”
答案 2 :(得分:1)
圆括号是多余的。我无法想象(54)
在语义上与54
不同的情况。现在,如果我错了......告诉我;我会学到新东西。
答案 3 :(得分:1)
在这种情况下的括号将被忽略。这和写作一样:
#define something 54
他们只是帮助你喜欢数学,如:
#define something (54-2)/2
与
不同#define someotherthing 54-2/2
答案 4 :(得分:1)
你为什么要用这个
#define SOMETHING (54)
而不是
const int SOMETHING = 54;
我不确定答案是什么 - 我认为#define
的这种使用可能有些过时。也就是说,使用括号很好,因为它使两种类型的声明表现基本相同。所以现在如果你想调整价值......
#define SOMETHING (54+1)
或
const int SOMETHING = 54+1;
......它们通常仍然等同于"显示常数"。如果没有括号,它们将不相等,因为在表达式被评估之前使用简单替换应用#define
。
因此,如果#define
值被应用,那么......
int a = 2*SOMETHING;
...根据声明中是否使用了括号,你会得到不同的结果:
int a = 2*54+1; // no parentheses -- answer is 109
int a = 2*(54+1); // parentheses -- answer is 110
当然,只要指定的值是一个简单常量,就像在您的示例中一样,括号的存在对编译器没有任何影响。 只是为了编写此代码的人或将来可能修改此代码的人的利益。通过一致地应用这种形式的声明,作者试图减少人为错误的发生
答案 5 :(得分:0)
“()”是括号而不是[括号]。它本质上是一个无操作。任何时候54有效,(54)有效,就像(50 + 4)有效,或(27 * 2)或任何其他表达。
也许您可以向我们提供有关您所看到的“质量标准”错误的更多信息?也许有人不喜欢这些parens,因为它们是不必要的。
答案 6 :(得分:0)
可能它是用这种方式编写的,以便将来的变化变得容易;考虑将54
更改为1024*54
或1024+54
- 使用parens,可以直接进行更改而无需进一步考虑。如果在没有parens的情况下进行更改,则运算符评估的优先级在程序中使用something
的任何地方都很重要。