《码出高效》学习笔记与书中错误记录

  • 时间:
  • 浏览:3
  • 来源:uu直播快3官方_UU快3直播平台

这也印证了那句 Error:expected expression,我须要一一有三个 表达式。

至于为甚 g++ 就能要能,你会你这个问题报告 报告 ,怎么让 和 为甚一些 IDE 越来越 写就能要能通过编译,我猜想的是(是的,随后 猜想,越来越 验证过),恐怕是你这个编译器,包括绝大多数的 IDE,都自动优化了你这个地方,把所有的 if 等说说上边,默认当作套上了大括号在补救,即使是单说说,也假装有了一一有三个 大括号作用域,怎么让 再编译的。

{int x;} 怎么让 {int x = 10;} 怎么让 有了 {},是十根说说,Statement。

同样的结果在环境中(我测试环境是 CodeBlocks,Windows)得到了相同的结果。

换句话说,怎么让 if (true) {int x;} 是合法的,那为甚 if (true) int x; 就不符合语法呢?

怎么让 是 Eclipse,直接给出错误。

然而测试的结果发现,好像事实之全都有如书中说的越来越 简单。

怎么让 既然 C 的编译器说不行,那肯定是 C 的哪个标准说了这是不合法的,怎么让 这是真的,越来越 就全是作用域的问题报告 报告 ,随后 语法、文法的问题报告 报告 。

int x 是一一有三个 声明,Declaration。

我比较好奇,除了 Java,一些语言会无需有同样的编译错误。

Unresolved compilation problem: Syntax error on token “)”, Statement expected after this token at …

Every declaration that introduces a name has a scope, in which they can be used.

我查阅了全都有资料(链接见文末),最后找到一一有三个 比较信服的答案——其实,根据 C 标准,这随后 错的,彻底的语法错误。

因为稍后分析,下面继续测试。

强行运行,编译失败,无法运行。

表达式 Expression,显然是一句说说 Statement。

Declaration not allowed here

先来看 C,测试环境是 CentOS 7.3 x64,GCC 版本是 gcc version 4.8.5 201150623 (Red Hat 4.8.5-28) (GCC)。

单说说在越来越 加大括号的情况表下,声明的变量不怎么让 再被使用,编译器认为越来越 任何意义。

warning: unused variable ‘x’ [-Wunused-variable]

首先是是测试 C、C++、Java 是全是都对这句话有相同的结果。

结果是,编译通过,给出 Warning。

怎么让 从你这个高度考虑,越来越 ,IDEA 的错误提示,Declaration not allowed 就不应该从变量作用域的高度考虑这里的变量声明不合法,随后 应该理解成,这是一一有三个 Declaration,而我须要一一有三个 Statement,全都有 Declaration 在这里是不被允许的。

C,不管是 ANSI C 还是 C99,都无法通过编译,直接给出 Error。

我做了一些测试,发现事情好像之全都有是越来越 简单。

这是 3 个详细不同的概念,也是绝大多数线程池员从一刚结束了就分不清的,怎么让 也始终分不清,从来分不清。

全都有,一些 gcc 的编译器,全是怎么让 能要能,怎么让 从我的测试情况表来看,MinGW、Cygwin、Windows、Window 的 Ubuntu 子系统、CentOS 下,gcc 都会给出 error。

我一刚结束了也是那我认为的。我那我以为,大慨应该通过编译,最多是给一一有三个 Warning 说 variable is never used

事实上与代码无关,即使是对刚才的 .c 文件,假若使用 g++ 编译器,也是通过的。

再来看 Java。

我相信,CLion 等 IDE 全是一样的结果,怎么让 越来越 ,越来越 怎么让 是 IDE 帮忙优化了,毕竟一些随后 ,写 C 代码漏 include 一些头文件,编译和运行的结果也是正确的(IDE 帮你自动补上了)。

怎么让 是 IDEA,会给出编译错误信息。

error: expected expression before ‘int’

问题报告 报告 是那我的:

书中给出的答案是,必须通过编译,会给出 Declaration not allowed here 编译错误信息,并对此,书中解释为:

这是一一有三个 Declaration,而我须要一一有三个 Statement,全都有 Declaration 在这里是不被允许的

今天在阅读《码出高效》的随后 看一遍了一一有三个 问题报告 报告 ,我也是第一次知道,怎么让 特别颠覆我的认知。全都有做了一些测试,并记录下来。

全都有,现在的问题报告 报告 的答案就很显然了,C 要求 if 上边是十根说说,然而文章一刚结束了那种写法,是 Declaration,全是 Statement,全都有语法随后 错的。

首先来澄清一一有三个 概念,if 条件句上边,须要跟一一有三个 说说。

这三句话,能通过编译吗,怎么让 能,会给出 Warning 吗,怎么让 必须,越来越 错误信息是什么。

怎么让 加在大括号,越来越 要能通过编译,遇到你们 常见的 Warning。

至于为甚 C 就不行呢?难道 C 的语法什么地方说了这是不合法的吗?闻所未闻啊?

I guess the counter-intuitive part of the question is: if this is correct C:

if (a == 1) { int b = 10;}

then why is this not also correct C?

if (a == 1) int b = 10;

I mean, a one-line conditional if statement should be fine either with or without braces, right?

The answer lies in the grammar of the if statement, as defined by the C standard. The relevant parts of the grammar I’ve quoted below. > Succinctly: the int b = 10 line is a declaration, not a statement, and the grammar for the if statement requires a statement after the conditional that it’s testing. But if you enclose the declaration in braces, it becomes a statement and everything’s well.

见: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 以及 https://www.quora.com/What-does-error-expected-expression-before-int-mean-in-C

int x = 10; 是一一有三个 定义,Definition。

同时,这与 Eclipse 的报错信息是一致的——if 上边须要一一有三个 Statement。( Statement expected after this token at … )

C++。