首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么说c,c++不能跨平台,编译器是在计算机操作系统上的吗,难道说编译器不在c,c++程序里吗?

所谓的跨平台就是同一套代码在不同的操作系统都能直接去运行,这里面涉及到一个很重要的问题,在java这门编程语言刚开始流行的时候就提到了跨平台的功能,在windows上运行的jar包直接放在linux上也能直接去运行,单纯从C/C++角度出发也是能够实现这种功能的...,因为其语法实现是相同的。...但在具体实施操作过程中还是多少有些差异,特别是涉及到操作系统接口等方面,毕竟linux和windows编程给出的api的接口还是存在一定的差异,所以单纯的谈跨平台还是有点差异,针对这种情况一般在软件架构里面会区分出很多的平台代码...编译器其实就是一种转化工具,将程序转化成能够运行的二进制文件,一般而言C/C++编译器是可以通用的,不同的操作系统使用不用的编译器底层。 ?...编译器是一种工具包的集合,内部的实现也涉及到C/C++的编程,编译器的通常说的编程代码还是存在一定的差异,编译器是为代码转化做服务的,真正实现跨平台的基础部件编译器算是一种,因为不同的操作系统或者计算机架构需要具体的对应实现

2.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

vue渲染思路笔记

之前一直不理解vue渲染过程先解析成ast之后再解析成虚拟dom是什么意思,ast和虚拟dom结构和表达的真的很像,一直觉得为什么要先解析ast,为什么不能直接变成虚拟dom。...今天分享一下自己的理解,也不知道是否正确。...先说一下vue渲染过程,第一次渲染的时候要先把template解析成ast语法树,然后内部实现一个render方法进行html的字符串模板编译,接着就是通过这个render方法解析出虚拟dom,最后把虚拟...当时不能给出回答,现在觉得应该是广度优先,因为上面图片就是原生的ast语法树,是广度优先,包括dom diff算法也是。...之前有说过为什么vue要有一个且只能是一个根标签,为了方便解析,应该是由ast语法树和虚拟dom决定的。

68030

C: #ifdef的简单条件编译

上面的输出结果是: 可能有些童鞋不解这个{}, 因为这个看起来很干扰人, 为什么要这么写? 一开始我也很好奇这样的用法有什么意义?...#endif 熟悉C的童鞋都见过这个语法, 不过在这里还是简单介绍下这个语法: 这种语法叫做: 条件编译 条件编译: 可以通过设置不同的条件,在编译编译不同的代码,预编译指令中的表达式与C语言本身的表达式基本一至如逻辑运算...("testtest"); 来看看运行结果: 这似乎没有出现我们上面说的结果, 是因为什么呢?...当我们回顾下代码, 我们会发现, 这个输出是正确的, 因为我们没有定义HEHE, 事不宜迟, 在头部加上宏定义: #define HEHE 123 最终源代码: #include "stdio.h" #..., 如果有哪里说得不正确, 欢迎大神指点!

2.1K10

我写了一个编程语言,你也可以做!

所以,我一定做了一些正确的事情。 因此在本文里,我将深入展示 Pinecone ,如何把源码成为魔法的过程。我也会谈已经做出的一些权衡,以及为什么我会做出那些决定。...语法分析器 管道流程的第二阶段就是语法分析器。 语法分析器把标识符列表解析为一个带有结点的树,用于存储这种数据的树称为抽象语法树,即Abstract Statement Tree,简称AST 。...为什么自定义更好 在词法分析器中,我仍然决定使用自己的代码。首先,词法分析器是一个小程序,如果我自己不写,感觉就像不会写我自己的“left-pad”一样愚笨。 但是语法解析器是另一回事。...我们真正应该问的问题是为什么要设计自己的语言?可能的答案: 有趣 拥有自己的编程语言真是太酷了 这是一个很好的副业项目 心理模型 虽然这三个可能都是正确的,但还有一个更大的动机:拥有正确的心智模型。...快进到你的第二语言,这似乎很难,你必须重新学习它的语法,而这种新语言的做法有所不同。 使用更多的编程语言,你会意识到这些语言具有共同的主题。

6510

Go | 代码断行规则

注意1 分号自动插入规则导致的一个结果是:自增和自减运算必须呈现为单独的语句,它们不能被当作表达式使用。...注意2 分号自动插入规则导致的另一个结果是:我们不能在选择器中的句点 . 之前断行。在选择器中的句点之后断行是允许的。比如: 正确写法: anObject. MethodA()....MethodC() 而下面这样是非法的(虽然在 Java 和其他语言中这种是合法的,但 Go 中是非法的): anObject .MethodA() .MethodB() .MethodC()...编译错误信息表明跳转标签 B 的声明之后必须跟一条语句。 但是,看上去,上例中的三个标签声明没什么不同,它们都没有跟随一条语句。那为什么只有 B: 标签声明是不合法的呢?...逗号 , 从不会被自动插入 一些包含多个类似项目的语法形式多用逗号 , 作为这些项目之间的分割符.比如组合字面值和函数参数列表等。 在这样的一个语法形式中,最后一个项目总可以跟一个可选的逗号。

1.2K20

go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

为什么和其他主流的编程语言不呢? 对于习惯分号结尾的开发者可能一时并不习惯 Go 的这种语法,于是决定探索一下 Go 的编程规范! ?...类似于上述的规则记忆很简单,验证也比较容易,难点在于理解为什么? Go 为什么会这么设计?或者说如何理解这种设计思路所代表的语义?...如果我们也采用这种思路来理解不同的编程语言,那么就能透过现象看本质了,否则真的很容易陷入语法细节上,进而可能忽略了背后的核心思想....所以数组的初始化长度不能为零,这样解决了无法操作数组的问题,但语义上又不正确了,因此这种情况下需要维护两个变量 len 和 cap 的值来确保语义和逻辑正确,其中 len 表示真正的数组个数,cap 表示内部数组实际分配的长度...因此,个人的看法是应该可以保留构造函数这种初始化逻辑,也可以换一种思路去实现,或者干脆直接放弃构造函数转而由编译器自动实现构造函数,正如编译器可以自动添加多字段之间的分号那样.

68840

c++系列之二 指向成员函数的指针(烧脑)

(还有一个 重要的区别 是:我们可以重载后者,却不能重载前者)。在 (obj.*fptr) 和 (p->*fptr) 两边的括号是语法所强制要求的。...int (Foo::*fptr) (string) = &Foo::f; 上面这行代码在g++ 4.2.4中编译的错误信息为:“不能将 int (*)(std::string)转化成 int (Foo:...另外,为什么C++如此费心地去发明这样的语法?很简单,因为它和常规指针是不同的东西,而且这样的类型转换也是违反直觉的。...我们可以将一个指向派生类的指针赋值给一个指向其基类的指针(即"is-a"关系),而所谓的“逆变性规则”(翻译君:不知道是啥,原文是contravariance rule)正是这种规则的反面。...为什么一个空指针也能调用成员函数?

2.8K20

为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

语法正确,逻辑错误 缺点二 .死板的语法 缺点三 .需要子函数来处理分支 switch 的 优点 ---- 请用5秒钟的时间查看下面的代码是否存在bug。 ?...语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。

45020

看懂编译原理:词法语法语义分析阶段 原理

比如 加法乘法嵌套这种复杂语法就需要递归解析匹配 正则就无法做到;正则只可以用于简单的结构匹配,比如对于赋值语句可以因为其结构简单语法分析原理peek预读token当符合语法规则的文法结构时,生成子节点...无上下文因为预读peek的token只能够用于生成ast,没有额外的token作为上下文进行优化ast,优化ast和上下文token信息读取是在语义阶段进行的)此处语法分析用的是无上下文的文法结构 只是为了生成正确的...但是这种只做到了正确,无法做到优化效率;优化效率意味着要读取更多的token信息(也就是拥有更多的上下文),在此处没有做优化 一是因为ast还未全部生成,二是因为更多的上下文token信息也意味着耗时,...那么编译器如何实现的呢?多态在编译期间如何实现?...在编译期间可以通过类型推导出animal变量具体的实际类型cat但是并不能让animal变量类型为cat,因为如果指定了animal变量为cat类型那么之后就不能够让animal变量为dog类型因为java

62720

27 个问题,告诉你Python为什么这么设计

为什么lambda表达式不能包含语句? 可以将Python编译为机器码,C或其他语言吗? Python如何管理内存? 为什么CPython不使用更传统的垃圾回收方案?...一些 C++ 和 Java 编码标准要求实例属性具有 m_ 前缀,因此这种显式性在这些语言中仍然有用。 其次,这意味着如果要显式引用或从特定类调用该方法,不需要特殊语法。...为什么不能在表达式中赋值?...大多数是为了少打一些字的黑客方案,但使用任意或隐含的语法或关键词,并不符合语言变更提案的简单标准:它应该直观地向尚未被介绍到这一概念的人类读者提供正确的含义。...为什么lambda表达式不包含语句? Python的 lambda表达式不能包含语句,因为Python的语法框架不能处理嵌套在表达式内部的语句。然而,在Python中,这并不是一个严重的问题。

6.6K11

谈谈代码质量问题

我们编写代码, 假如代码有语法错误,那么编译器将会拒绝通过编译, 假如代码语法正确, 那么编译器会通过编译, 因此, 判断代码是否编写正确, 可以拿代码是否能通过编译编译作为衡量的标准。...其实代码质量的好差和菜做的是否好吃从某种角度来说有些相似, 评价它们好坏与否肯定会带上一些主观色彩, 但是也有衡量的指标, 只是这种指标比较模糊, 比较难以琢磨罢了。...如果是网站访问速度慢, 影响到用户正常使用,明显是不能忍的,大棒子砸下来,程序员只能加班加点去优化。但是如果是代码质量有问题呢! 优化?...开什么玩笑, 大家都这么忙,需求都做不完, 哪有闲工夫去整这种没有成果产出的事情, 再说了, 现在代码跑的好好的,要是优化出事情锅谁来背?...学校里有教C++的, 有教Java的, 有教算法的, 有教数据库, 但是从来就没有教如何写的一手好代码的,为什么? 因为根本没有一套标准的方案可供参考使用。 想知道我最终想表达什么标新立异的观点吗?

1.2K90

为什么程序员都不喜欢使用switch,而是大量的 if…else ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

54020

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

36710

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

1.1K20

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

56950

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

52420

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的...,因为从语法角度来说是正确的!...上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以使用eslint这种的工具强制我使用花括号...那还有一个问题,为什么要使用break来做一个判断结束呢?这不是很容易造成语法错误了?那就要说到子函数的问题上了。...后来发展的新语言为了标榜自己的血统,多少都要参考下C,然后就把switch这种诡异的语法也继承下来了。

42730
领券