【问题标题】:What is the difference between (int) -1 and (-1) in C? [closed]C中的(int)-1和(-1)有什么区别? [关闭]
【发布时间】:2019-11-15 22:22:21
【问题描述】:

我想知道以下是否相同:

#define IDEFAULT (-1)

#define IDEFAULT (int) -1

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为在比较和对比可能的语法错误的无限组合时,我没有看到很多价值。
  • 这样做的目的是什么?您是否通过反复试验来学习?
  • 是的,两者都是一样的。无论如何,-1 的类型为 int。但是可能会有一些棘手的用法。例如,如果您有一个名为foo 的函数,那么foo IDEFAULT; 在第一种情况下会导致合法调用foo(-1);,但在第二种情况下会导致非法foo (int) -1;
  • 我投票决定将此问题作为题外话结束,因为它不太可能对未来的读者有用。
  • 这两个是一样的。他们定义了一个名为IDEFAULT 的宏,其值为-1。如果您改为:#define IDEFAULT -1,那么情况会略有不同;如果有人写了:5 IDEFAULT,上面的定义就是4。使用您的两个定义,这将是一个语法错误(在这种情况下会很好)。

标签: c


【解决方案1】:

我想知道以下是否相同:

两者是相同的,因为它们会产生语法错误

您似乎正在尝试在 C 中使用 ,因此正确的语法是:

#define macro-name char-sequence

所以我会写例如:

#define myMacro -1

myMacro 将等于 -1。如果我用括号括起来-1,它不会有什么不同。在Why use Macros in C?了解更多信息


PS:但是语法错误并不相同:

main.c:3:9: error: expected declaration specifiers or '...' before '-' token
    3 | define (-1)
      |         ^

main.c:3:1: warning: return type defaults to 'int' [-Wimplicit-int]
    3 | define (int) -1
      | ^~~~~~
main.c: In function 'define':
main.c:3:14: error: expected declaration specifiers before '-' token
    3 | define (int) -1
      |              ^
main.c:3:9: error: parameter name omitted
    3 | define (int) -1
      |         ^~~
main.c:8: error: expected '{' at end of input
    8 | }
      | 

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2016-04-22
    • 2014-06-07
    • 1970-01-01
    • 2011-02-27
    • 2014-09-03
    • 2020-11-22
    • 2010-11-18
    相关资源
    最近更新 更多