- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在试验 extern
和 extern "C"
一段时间,不小心在其中一个标识符中输入了错误 - $
偷偷溜进来了。当我编译代码并得到一个 undefined symbol 的错误并最终看到导致它的原因时,这让我很好奇它是否真的可以编译。你猜怎么着 - Clang 实际上确实编译了它。
根据我之前阅读的文档,标识符的规则基本上是:
a-z
、A-Z
或 0-9
和 _
。但这编译得很好 - 也没有显示警告:
void __this$is$a$mess() {}
int main() { __this$is$a$mess(); }
看的时候:
Ingwie@Ingwies-Macbook-Pro.local /tmp $ clang y.c
Ingwie@Ingwies-Macbook-Pro.local /tmp $ nm a.out
0000000100000f90 T ___this$is$a$mess
0000000100000000 T __mh_execute_header
0000000100000fa0 T _main
U dyld_stub_binder
我可以很清楚地看到符号名称。
那么为什么 Clang 会让我这样做,尽管按照 ANSI 标准,它不应该这样做?即使是我安装的 GCC 6 也没有关于此的警告或错误。
哪些编译器将允许使用哪些类型的标识符 - 为什么?
最佳答案
2018 C 标准中标识符的规则包括:
_
,a
到 z
,A
Z
,通用字符名称,或“其他实现定义的字符”。0
到9
。\u
后跟四个十六进制数字或 \U
后跟八个十六进制数字,指定 Unicode字符。因此,如果一个实现允许 $
,那么它就是该实现的有效字符。您可以使用它,但它可能无法移植到其他实现。 C 标准要求实现接受列出的特定字符,但它允许它们接受更多。一般来说,C 标准应该被视为一个开放的领域而不是一个围墙花园:行为是在领域内定义的,但你不会停在障碍处;您可以超越它,风险自负。
你学到的规则是可移植的规则,而不是 C 标准要求实现限制你的规则。
C 标准定义了严格符合代码,粗略地说,代码应该在任何 C 实现中工作,符合代码,这是在任何 C 实现中工作的代码至少一个 C 实现。符合规范的代码仍然是 C 代码。所以你学到的规则是严格遵守代码。
通常,您应该更愿意编写严格符合标准的代码,并且只在 yield (速度、特定平台上的开发便利性等)值得付出代价(失去可移植性)时才使用附加功能。
关于c++ - C 标识符名称 : What goes with which compiler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54449184/
我发现很难决定某个东西是否应该成为域或应用程序的一部分。 通读 answer授权等概念有很大帮助,但我仍然发现自己在其他事情上苦苦挣扎。 为了说明我的困惑,请考虑一个发表评论的案例。以下是发表评论之前
虽然我是一名希望探索社交软件模式的程序员,但我也对它们的心理和社会学起源感兴趣。 我建议的格式是将每个回复限制为一次阅读,并简要说明为什么它很重要。 这个想法是,我们将能够看到哪些特定的读数最重要。由
我正在尝试编写一个数独生成器算法,这是我的 C++ 代码: void generateSudoku(num sudoku[][N]) { int i,j,k; int vett[N],n,
来 self 的书: .bss: Uninitialized global C variables 常见: Uninitalized data objects that are not yet all
在脚本结束之前打印内容时,从 php 脚本打印结果的方法是什么?我尝试使用输出缓冲区,将 sleep() 放在 echo 之间进行测试,但结果始终在脚本执行后显示。这也是浏览器端的事情吗? 最佳答案
我从 SonataAdminBundle 文档中的几个示例中重新组合了以下信息。如果有一些错误请纠正我,但这是我在 BlogBundle 的情况下得到的: 如您所见,一般来说,每个包都包含fron
早上好, 我正在编写一个 python 守护程序,需要将视频转换为 .mp4 格式。为此,我计划通过 Subprocess 使用 Handbrake,但我得到的结果好坏参半:有时它有效,有时该过程甚至
我有一个旨在进行反向传播的神经网络。 我一直在使用以下方法对隐藏层进行权重更新 Δwji = η × δj × yi 其中 δj 是 φ'(vj) * ej,其中 vj = Σi wjiyi,对于输出
我正在尝试将此 C++ 函数转换为 mips。我想我在循环中遇到了问题,因为当我运行它时,它给了我 13..1.17.5.. 但我的输出应该是两个 ip 地址:130.52.0.10 和 171.9.
我正在使用 position: fixed 和 bottom: 0 将一些东西附加到屏幕底部。然而,在我的 11"Air 上,这个名字似乎从屏幕上消失了,你可以看到网站 here。我已经在下面发布了我
我编写了这个 HttpRequest 方法,但由于某种原因,它总是出现 404 Not Found,即使在 java 进程未运行时文件位置存在。 import java.io.*; import ja
我有一个 img 元素用作导航栏的背景,然后我将在 img 元素的顶部显示导航链接。正如您将在下图中看到的,我的问题是保存链接的 ul 显示在导航栏的右侧,而不是显示在导航栏上方。为什么要这样做以及如
我正在试验 extern 和 extern "C" 一段时间,不小心在其中一个标识符中输入了错误 - $ 偷偷溜进来了。当我编译代码并得到一个 undefined symbol 的错误并最终看到导致它
我一直在搜索这个,但我似乎在这段代码中遇到了相同的文章: try { //some code } catch(Exception $e){
首先,它不是任何其他问题的重复,我已经阅读了有关该问题的 Angular 指南。但是我还有几个问题。 功能模块是最简单的模块——你有一个功能——将它分组到功能模块中。假设除了明显的功能外,我还拥有每个
管道中首先发生的事情是:URL 重写(如 IIS 的 URL 重写模块中所定义),还是 HttpHandler(通过 IIS7 的添加托管处理程序功能添加)? 最佳答案 重写模块首先执行。它会在选择任
目前,我使用 Azure 服务总线作为平台中不同服务之间的通信和保持数据一致性的手段。但是,假设我的一项服务(订阅者)长时间停机并且无法接收任何事件。突然间,该服务处于不一致的状态。 Azure 服务
每 N 次点击,出站链接就会发生变化的 PHP 或 JQuery 方式。 例如: Visitor1 单击 LinkA - 他们被带到 http://google.com 访客 2 单击 LinkA -
这应该很简单,但我误解了 CSS 行为。 searchbar-title-group 应该占据一整行,包含一个左对齐的标题和 2 个右对齐的按钮。按钮组是右对齐的,但它出现在下一行。为什么?我应该如何
一切正常,但我希望屏幕较小时居中对齐,它居中对齐,但屏幕之外还有一个空间出现。 代码: .example { line-height: 30px; background-color: #363
我是一名优秀的程序员,十分优秀!