V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  GeruzoniAnsasu  ›  全部回复第 117 页 / 共 142 页
回复总数  2832
1 ... 113  114  115  116  117  118  119  120  121  122 ... 142  
2019-02-01 03:52:49 +08:00
回复了 papertiger 创建的主题 问与答 哪些情况下说话中文夹英文会让人讨厌?哪些时候不会?
@aijam

看到 25L 我突然想起来一个晕乎了好久都没搞清楚的概念

grammar/syntax 到底指什么
这俩词在中文中都可能被翻译成“语法”,但 grammar 在编译原理中被翻译成了“文法”,syntax 称为“语法”

然后某天在翻了很多国外的教材之后终于算是搞清楚了:

中文的“语法”或者“文法”都应对照 grammar 这个词,指的是行文规则,句子成分构成等一系列语言要素的统称

syntax 这个词在中文中没有原始的可对照的确切的词,它指的是“语句的成分结构”

所以编译错误提示的是 syntax error,指的是这个语句中含有错误的成分或者结构不正确
而比如 BNF 定义的“语法 /文法”规则对应中文原词,指的是构成语言的所有要素

“语法错误 syntax error ”应该称为“句构错误”才比较贴切
2019-02-01 00:34:05 +08:00
回复了 ncwhale 创建的主题 C 弄了个 CPP 工具库,求教 CMake 部分配置问题喵~
感觉 c++之类的库有两种发行方式,一是单独编译成 lib 然后其它工程链接进去,另外是 header only 的库,把对应库复制进目标工程就行,这种 header only 的库有些会提供一个“编译”成单文件的成品(是的我就是在说 catch2 )
2019-02-01 00:29:47 +08:00
回复了 Riverrun 创建的主题 程序员 新手程序员,如何提高面向对象编程能力?
个人经验,写点 MFC 的小东西

不用什么大项目,随便什么对话框小工具就足够了

以前学编程的时候,c++看完类一脸懵逼一点概念都没,然后稍微学了学 MFC 突然开窍了,MFC 是纯 C++(C with class)搭起来的框架,没有任何扩展语法和机制,最多有点点宏,对学习 OO 编程很有帮助( c++语言限定)
想看这篇玩意的原文。。
2019-01-30 15:59:00 +08:00
回复了 doraos 创建的主题 问与答 x86 调用者保存被调用者保存寄存器数量是否分配的不太合理
@feather12315 行 8,就当做 x86 扩展到 64 位的各种架构不统一必须叫自己的名字好了

想补充吐槽一下“保存”这个词
我猜原文说的是 preserve?
在 intel 的手册 38.3.2

> As with most systems, it is the responsibility of the callee to preserve all registers except that used for returning a
value.

应该译作“保护”,我 2#的意思说反了,lz 说的东西的原意应该是

“被调函数有义务保证 rbp rbx r12~r15 这几个寄存器的值在进出函数前后一致”

如果按照 lz 的疑问是“为什么被调 routine 可以随意修改这么多寄存器的值不需要负责任”来理解的话

……只能回复说,恩,官方其实是建议负责任的,但可能现行 ABI 制定者觉得没必要
2019-01-30 15:32:05 +08:00
回复了 doraos 创建的主题 问与答 x86 调用者保存被调用者保存寄存器数量是否分配的不太合理
首先 x86 跟 x86_64 不一样。。。x86_64 一般简写成 x64

然后 bp bx r12 r13 r14 r15
vs
ax cx dx di si sp r8 r9 r10 r11
。。是咋得出被调用者保存少的结论的
2019-01-29 16:45:38 +08:00
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
@icyalala
@catror
@enenaaa
可以理解为,x64 只有一种调用约定,但有两个不同平台版本的实现
尝试在编译到 x64 的源码函数上声明 stdcall 或 cdecl 都会被编译器忽略

另外不定参函数这种东西,在 C++中必定是与变参模板同时存在的,在 C 中,变参函数实际上就是变参泛型的 approach, “运行时不定个数”类的东西不会用变参函数来写,一定会封装成某种数据结构并把指针传进去。无论 C 还是 C++,变参函数都是用来方便“静态不定个数参数的调用”的,C++通过变参模板给它加了更强的约束而已。

所以最开始就想说,参数不能像 lz 设想的那样传,传一个“运行时不定长”的东西给变参函数本来就是错误的做法
2019-01-29 14:55:07 +08:00
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
啊。。。原来 fastcall 是用 6 个寄存器
2019-01-29 14:48:35 +08:00
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
@icyalala 其实是不太想解释

首先如果是传参数进来,在函数里用 va_系列宏去解开传进来的变长参数,是可以用的,因为 x64 默认的 fastcall 约定虽然用寄存器传参,但会在栈上放一个副本,还是有地址可引用。不过放副本这个操作是被调函数的 prologue 做的,从外面打包参数进来的时候前 4 个参数还是只会通过寄存器传递。

如果非要 hack 的话确实可以内嵌一下汇编先把前 4 个参数放进寄存器其余的压栈,但这样 hack 的话连 call 也必须要用汇编嵌进去并且返回后手动 add rsp 恢复栈平衡,更要命的是在 win 和 linux 上同样是 fastcall 约定用到的寄存器还不一样,还得针对平台写两套汇编

虽然总共代码也不多,但总觉得崩的可能性太大了,想强迫 lz 先想其它的方法解决
2019-01-29 14:16:44 +08:00
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
本来想说不能这么传

然后再看了几遍。。。。foo 是已存在已定义不可改的接口吗。。那我觉得没有写法能帮你

va_list 在 x64 上没法用
2019-01-29 12:30:20 +08:00
回复了 pinews 创建的主题 宽带症候群 深思熟虑告诉你,为什么要搞 ipv6
复制粘贴:
> 我以为民科的特点就是在不了解不考虑甚至有意忽略事实原由的情况下仅凭想象推测结论。

你的想法都对,但并不是建立在事实上的
2019-01-29 11:23:44 +08:00
回复了 abclearner 创建的主题 奇思妙想 请大家学会拒绝服务攻击
我理解的拒绝服务攻击是,本来我们桌吃得好好的,结果隔壁突然有人掀桌子骂服务员搞的我们叫服务员点菜都不理我们了
2019-01-29 11:14:29 +08:00
回复了 Oathbinder 创建的主题 算法 如何设计一个二叉平衡树的 key
。。更新行号这个行为已经必定是线性的,除非每次插入时不更新所有行号

这样的话大概需要一个表记录从某行之后的所有行号进行了怎样的偏移,然后在合适的时间一次过全部更新,尽可能减少 O(n)遍历所有元素的次数让复杂度逼近 logn
2019-01-28 15:16:39 +08:00
回复了 varzy 创建的主题 问与答 有什么适合父母使用的娱乐向 app?
@terence4444 (供)娱乐 向
@horizonl 我的天……你指望能跟十几岁初中生一起好好欣赏电影?真的一起看看动画还行,晦涩看不懂的起码人少,偏偏是观看门槛低题材又大多相对严肃的电影。。。说看不懂的有一半,瞎解析的有 1/8,评论区像看中学作文,反正我是不太想在 b 站看(非动画)电影,啥时候 B 站观影人群跟豆瓣重合了可能就能看了。

哪怕矫情点小资点做作点呢,那起码算作过度表达,B 站弹幕评论区(包括长评)是什么水平,感觉就像听邻居小朋友在讨论国家大事,除了想笑不知咋形容

还不如更没营养的音乐区
1 ... 113  114  115  116  117  118  119  120  121  122 ... 142  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3075 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 65ms · UTC 11:52 · PVG 19:52 · LAX 04:52 · JFK 07:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.