- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我决定查看标准 Haskell 模块的源代码 Data.List发现了一些有趣的东西。代码显然首先由 C 预处理器处理,正如一堆 #ifdef
所建议的那样,然后才由 Haskell 编译器编译。但是,正如documentation中指出的那样,C 预处理器对不同于C 本身的源代码不是很友好。 :
The C preprocessor is intended to be used only with C, C++, and Objective-C source code. In the past, it has been abused as a general text processor. It will choke on input which does not obey C's lexical rules. For example, apostrophes will be interpreted as the beginning of character constants, and cause errors. Also, you cannot rely on it preserving characteristics of the input which are not significant to C-family languages. If a Makefile is preprocessed, all the hard tabs will be removed, and the Makefile will not work.
但不知何故,Haskell 代码在 C 预处理下仍然保留?可能这个片段提供了一个线索:
#ifdef __GLASGOW_HASKELL__
import GHC.Num
import GHC.Real
import GHC.List
import GHC.Base
#endif
infix 5 \\ -- comment to fool cpp
-- -----------------------------------------------------------------------------
-- List functions
这个愚弄cpp的注释
是如何工作的?看起来像是一个有趣的 hack,但我无法通过 google 搜索有关该主题的任何内容。在 Haskell 中,这一行声明了一个优先级为 5 的中缀运算符 \\
,--
之后的所有文本都将被忽略。但是它对 C 预处理器有什么作用,它实际上是通过什么方式“被愚弄”的?
最佳答案
如果你简单地说:
infix 5 \\
当该行位于文件末尾时,C 预处理器发出以下消息:
infix 5 \foo.c:8:10: warning: backslash-newline at end of file
如果它不在文件末尾(感谢@commenter),它只会“吃掉”一个反斜杠(将其与以下换行符相关联)并且 Haskell 端的输出不正确:
infix 5 \
但是如果你之后添加了一个 Haskell 类型的注释,Haskell 会忽略它(很明显!),这对 C 预处理器来说不是问题,因为 \
不在注释的末尾行:
infix 5 \\ -- comment
cpp 发出完全相同的文本,Haskell 可以解析有趣的部分,去除 --` 注释。
(注意它永远不是有效的 C,但预处理器不介意)
注意:如果你想用 \
结束你的 C/C++ //
注释行,问题是相似的:你不能没有它继续注释下一行:不是你想要的。
关于c - 带有两个反斜杠的行如何欺骗 C 预处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181630/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我有一个只适用于火线摄像头的第三方视觉库,是否有可能以某种方式欺骗 libdc1394 认为连接了火线摄像头但通过 v4l 从 USB 网络摄像头传递帧? 最佳答案 鉴于 stackoverflow
在浏览网页时,我需要为我正在查看的网站伪造我的屏幕分辨率,但保持我的视口(viewport)不变(Chrome 或 FF 的模拟无法解决我的问题)。 例如,如果我转到 http://www.whati
假设情况。我在 *nix(linux、BSD 等)中有一个命令行程序。编写它是为了让您将文本文件作为参数传递给它 $ program file.txt 运行程序,它会查看 file.txt 中的文本。
我从欺骗中搜索了 proctecting .net 程序集并找到了 this post很有用。但是,我在帖子中看到了一个非常明显的矛盾。有一点表明,如果用户是同谋,强名称就没有用: But if th
我有一个已加密的 JWT,希望存储在 HttpOnly 安全 cookie 中并通过 SSL 发送。但是,由于我在第一次访问我的网站时没有设置 cookie,那么在我创建 cookie 之前,如何阻止
我想制作一个应用程序,作为第三方应用程序的便捷入口点,使用我的参数启动其 Activity 之一,而不是单击它来执行相同的操作。我对第三方应用程序有一些了解:我需要一个带有单个 .putExtra 的
我将 HtmlAgilityPack 用作自动化流程的一部分,以从现有内部网页中提取内容。问题是我需要让它认为 IsPostBack 是真的。 这是流程: 对页面进行初始调用并提取 HTML。 解析
我在 ARM Cortex-M0 的一些旧版 ROM 代码中遇到了挑战 ROM 代码有其数据存储部分,并且在某些时候它通过函数指针列表从其他 volatile 存储器调用函数。 我目前已用完添加代码的
我一直想知道是否有一种方法可以欺骗导航器、屏幕等 JS 对象,以便在页面请求时发送虚假数据。 我使用 C# 开发一个包含 GeckoFx 浏览器的应用程序,我想做这样的事情:每次我打开一个包含 JS
我想知道是否有一种方法可以将 SuperType 数组转换为 SubType 数组。像这样: SubType[] subArray = (SubType[])someSuperTypeArray; 我
我的所有功课都使用平板电脑,因为我没有一台好电脑,但网站通常以移动设备格式出现。有没有办法设置我的浏览器来告诉网站它是一台电脑,而不是平板电脑?如果可能的话,这是否会导致任何其他问题,例如禁用触摸屏或
我想按照类(class)大纲学习这个概念。我需要一些想法来进行 ICMP 欺骗。我在网上找到了 ICMP 欺骗程序,但我必须这样做:当主机 ping 一个未知的 ip 地址时,无论它是否存在,都必须有
我正在使用 PayPal Hosted Pages 构建一个注册系统。据我了解,我可以使用 Silent POST 功能让我的应用程序知道托管结帐页面上何时发生了成功的交易。我担心可能会欺骗此 POS
我正在尝试编写一个应用程序,它只是作为一个已经存在的网站的界面。没有 API,因此将进行大量的 POSTing、GETing 和 XML 解析。 问题 1:“您需要在浏览器中启用 JavaScript
我们已经使用带有设置 cookie 的 PHP 创建了一个数据库驱动的网站,现在需要防止 HTTP 欺骗,关于如何做到这一点有什么想法吗?我们是这方面的初学者,所以任何帮助都会很棒 最佳答案 您不能“
如果我将这两者都放入数据库中,是否足以防止站点访问者欺骗他们来自不同的 IP 地址? $ip1 = $_SERVER['HTTP_X_FORWARDED_FOR']; $ip2 = $_SERVER[
当我在一些表之间进行内部联接时,我遇到了一些查询抛出重复的问题。 本质上,我加入了一些标签,以及基于 videoId 的 channel (想想流派),这样一个特定的视频文件就可以有多个标签并成为多个
据我所知,没有什么可以限制任何开发人员对他们的信标进行编程以使用特定的 UUID、主要、次要或标识符。 如果我创建一个 UUID 为“foo”的 iBeacon,如何防止其他开发人员创建具有相同 ID
我希望构建一个简单的服务器来代理我网络网关处的 TCP 连接(无恶意),但 TCP 握手失败。 使用 netfilter,我已经设法更改传入 TCP 数据包的 IP 和端口,以便将它们转移到我的应用程
我是一名优秀的程序员,十分优秀!