我有一堆C函数被分配给一个函数指针数组,沿着这条线:
typedef int (*func)(int);
int SomeLongName1(int a) {
// ...
}
// ...
int SomeLongName1000(int a) {
// ...
}
func f[] = { SomeLongName1, ... , SomeLongName1000 };
Run Code Online (Sandbox Code Playgroud)
这是很多工作要创建并且容易出错.例如,函数名中可能存在拼写错误,使得有效函数仍然被命名,但错误的函数仍然存在.或者,如果最后添加了一个新函数,则可能会忘记进入并将其显式添加到函数指针列表中.
为了避免必须显式声明函数指针数组,我尝试了各种技巧,例如宏,这使得代码难以理解,并且需要知道宏如何工作,而我通常对它们不满意.
我想做的是这样的事情:
typedef int (*func)(int);
func f[] = {
int SomeLongName1(int a) {
// ...
}
// ...
int SomeLongName1000(int a) {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
这样,数组就会自动创建,如果有一些方法可以在末尾放置一个空指针,那么我可以确定有多少函数指针也很好.
但是,上面的内容并不是有效的C,而且我会以任何方式完成此任务.如果它是编译器特定的(例如GCC扩展),那就没问题.
所有函数在编译时都是静态知道的,所以我想避免必须对函数指针数组进行任何运行时初始化 - 而不是我找到了一种方法来做到这一点.
这个相关的问题如何定义一个函数数组,似乎问了同样的问题,但没有把它带到它的逻辑结论.具体来说,我不想重新键入我已输入的任何内容,以节省时间并避免错误.
我遇到了Dropbox缓存的问题,我经常发现我与Dropbox同步的特定机器已经用完磁盘空间而Dropbox缓存是罪魁祸首.这是一个问题,因为机器Dropbox安装在无头(或几乎是这样),因此唯一的指示是出现问题突然发生在机器上应该可用的数据.
我已经读过可以清除缓存,但这很痛苦,因为这台机器正在运行OS X并且没有命令行界面,这意味着我必须将VNC插入机器才能重启Dropbox.这似乎也限制了我自动清除缓存的选项,虽然必须创建一个周期性任务来清理Dropbox文件夹似乎很容易出错并且容易出错.(例如,磁盘可能会在脚本运行之前填满.)
(更新:在低磁盘条件下删除文件似乎导致Dropbox再次开始同步而不重新启动,但我不确定是否有任何不良副作用,在我读过有关缓存的任何地方都说要停止删除期间Dropbox,然后重启.)
另外,似乎Dropbox空间耗尽这么快的原因是我有一个大的日志文件(大约半千兆字节),这只是附加的,但Dropbox正在创建一个新的缓存副本每次更改时都会显示整个旧版本.因此,从性能的角度来看,对于文件的每个微小的几个字节的添加,它不断创建这个大文件的副本是不可取的.
这台机器的磁盘空间相当紧张,所以我宁愿让Dropbox限制它的缓存量.有办法做到这一点吗?到目前为止我的搜索结果是空的.
更新:我尝试打开一个Dropbox支持请求,只是收到一封电子邮件回复说:"感谢您写信.虽然我们很乐意回答我们收到的每一个问题,但遗憾的是我们无法回复您的询问.大量的支持请求." ಠ_ಠ
我发现这个问题有答案git diff。但是,我没有使用任何类型的版本控制来比较文件(我什至在我尝试比较的机器上没有可用的版本)。
基本上,类似于引用的问题,我试图查看空格的变化。该diff命令可能会显示:
bash-3.2$ diff 6241 6242
690c690
<
---
>
Run Code Online (Sandbox Code Playgroud)
但我不知道那是换行符,换行符和空格,还是什么。我需要知道两个文档之间的确切更改,包括空格。我已经尝试过cmp -l -b并且它有效,但是当有很多变化到它也不是真正有用的地步时,它很难阅读。
我真正想要的是让空白以某种方式呈现的某种方式,这样我就可以准确地说出空白是什么,例如颜色或 ^J、^M 等。我在手册中没有看到任何内容;diff --version显示 GNU 版本 2.8.1。
再举一个例子,我还尝试diff通过管道传输through的输出hexdump。
bash-3.2$ diff 6241 6242 | hexdump -C
00000000 36 39 30 63 36 39 30 0a 3c 20 0a 2d 2d 2d 0a 3e |690c690.< .---.>|
00000010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | …Run Code Online (Sandbox Code Playgroud) 这似乎是一个简单的问题; 也许它很简单,很难找到能找到答案的搜索.在Scheme(特别是Guile实现,如果这有任何区别)我如何评估已被引用的内容?
这就是我想要做的.
我基本上需要确保我定义的函数以特定顺序计算其参数,因为在评估其他参数期间,评估一个参数所引起的副作用是依赖的.但是,Scheme表示可以按任何顺序计算参数,因此我想通过引用参数手动强制它,然后按所需的顺序手动评估它们.
似乎"eval" 应该做我想要的,但它有两个问题:
我尝试过其他技巧,比如建立一个lambda:
(list 'lambda '() '(car (b c)))
Run Code Online (Sandbox Code Playgroud)
但似乎必须对此进行评估以生成程序.我也尝试过:
(list lambda '() '(car (b c)))
Run Code Online (Sandbox Code Playgroud)
但这会返回一个"原始内置宏",它也不起作用.
编辑:看起来宏将用于控制评估顺序:(defmacro test1(ab)`(begin,b,a))
我的本地主机(端口 8080)上运行着一台服务器,它试图为本地文件创建 IMG 标签。但是,这些文件不会出现在 Firefox 11 中。
我最初是使用 Javascript 创建图像标签,但由于失败,我又转而使用 HTML 来尝试直接引用文件的各种方法。以下均无效:
<img src="file:///localhost:8080/C://Users/me/IMG_1000.JPG">
<img src="file:///localhost/C://Users/me//IMG_1000.JPG">
<img src="file:///C://Users/me/IMG_1000.JPG">
Run Code Online (Sandbox Code Playgroud)
如果我将最后一个 URL 直接粘贴到地址栏中,则图像可以正常打开。
我已按照此处的说明进行操作:
http://kb.mozillazine.org/Firefox_:_Issues_:_Links_to_Local_Pages_Don%27t_Work
我尝试过直接修改 user.js 和 prefs.js 以及通过 about:config 查看器修改。
我从“帮助”->“故障排除信息”->“配置文件目录”->“打开包含文件夹”获得了配置文件目录的正确路径。
添加的相关行是:
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
user_pref("capability.policy.localfilelinks.sites", "localhost:8080");
user_pref("capability.policy.policynames", "localfilelinks");
Run Code Online (Sandbox Code Playgroud)
我最初将 http:// 放在“localhost:8080”中,但 Firefox 删除了它。我也尝试了“http://localhost”和“http://127.0.0.1”,但这些也不起作用。
但是......奇怪的是,即使我从 about:config 输入它们并且可以在 prefs.js 中看到它们,我却无法从 about:config 看到它们!这让我觉得也许 mozillazine 上的信息已经过时了,毕竟它说该信息适用于“Firefox 1.5 及更高版本”,而我正在使用 Firefox 11!
注意:我想使用 file:// 访问的原因是我不想允许任意访问我的计算机上的文件。多解释一下:我有一个数据库接口,访问数据库所需的只是密码。这很好,因为我想允许任何拥有密码的人在我的机器外部访问数据库,但图像文件存在于数据库外部。为了通过服务器提供文件(因为存在的文件是动态的),我需要创建一个新的 CGI,它在数据库中采用某种标识符,但由于用户可以访问数据库,他们可以注入任何文件名他们想。
编辑:另外,我也无法 window.open() 文件 URL。这可能带来什么安全好处?
我已经实现了一个简单的C"类",在结构中使用函数指针来实现成员函数,并将指针作为每个函数的第一个参数传递给结构,类似于隐含的"this"指针. C++.
%module mytest
%{
typedef struct mytest mytest;
struct mytest {
int data;
int (*func1)(mytest *,int);
void (*func2)(mytest *,int);
};
int f1(mytest *me,int n) { return me->data + n; }
void f2(mytest *me,int n) { me->data += n; }
mytest *mytestNew(int n) {
mytest *me = (mytest*) malloc(sizeof(mytest));
me->data = n;
me->func1 = f1;
me->func2 = f2;
return me;
}
%}
typedef struct mytest mytest;
struct mytest {
int data;
int func1(mytest *,int);
void func2(mytest *,int);
};
extern mytest …Run Code Online (Sandbox Code Playgroud) 我尝试了各种scrollTo()解决方案,它们隐藏了移动浏览器中的地址栏,但它们似乎都没有在移动Firefox中运行.
在这种情况下是否需要使用不同的技巧?
我正在尝试使用weinre进行调试,并在Chrome中设置了一个简单的测试,以确保一切正常.但是,在开发人员工具中我收到错误:
"The page at 'https://myhost/...' was loaded over HTTPS, but ran insecure content from 'http://localhost:8080/target/target-script-min.js': this content should also be loaded over HTTPS.
Run Code Online (Sandbox Code Playgroud)
我已经看到了关于调试"Cordova"或"Phonegap"的其他一些答案.我没有使用这些东西中的任何一个,建议的答案似乎不适用于此.我试图只调试简单的HTML/Javascript.
我在weinre网页上没有看到启用https支持的任何提及(它明确提到它不使用https),并且我没有很多控制浏览器端(这需要在各种工作上工作)在我看来臭名昭着的android浏览器,对本地调试完全不友好,这实际上是我尝试使用weinre调试的原因),所以我不知道如何继续.由于页面传递敏感信息,因此不使用https是不可能的; 使用weinre over http是可以接受的,因为我通过ssh隧道连接.
更新:我还尝试使用boomarklet方法:我将书签网址添加到Chrome Mobile,但是当我尝试导航到书签时,它似乎卸载原始页面:我可以看到连接,但是当我看到资源,我看到的只是书签.但是,如果我尝试通过键入书签的名称来运行书签,直到标记的javascript代码出现在自动完成中,它将保留在当前页面上,但客户端页面中不会显示任何目标.我认为这是出于同样的原因,因为我看到书签正在引用http://localhost:2000.
SQLite 3.8.3增加了对CTE的支持.我在这个页面上尝试了一些示例CTE,它们工作正常.但是,在阅读文档并尝试调整一些示例后,我无法创建简单的测试.
首先,我创建一个包含两个字段的简单表:id和parent.这将创建一个简单的树或链接的记录列表:
CREATE TABLE test(id INTEGER PRIMARY KEY ASC,parent INTEGER);
Run Code Online (Sandbox Code Playgroud)
现在我用几行填充它:
INSERT INTO test (parent) VALUES (NULL);
INSERT INTO test (parent) VALUES (1);
INSERT INTO test (parent) VALUES (2);
INSERT INTO test (parent) VALUES (3);
Run Code Online (Sandbox Code Playgroud)
之后我有一个看起来像这样的表:
---+-------
id | parent
---+-------
1 | NULL
2 | 1
3 | 2
4 | 3
Run Code Online (Sandbox Code Playgroud)
现在我想生成沿3和1之间路径的行列表:
WITH RECURSIVE test1(id,parent) AS (
VALUES(3,2)
UNION ALL
SELECT * FROM test WHERE test.parent=test1.id)
SELECT * FROM …Run Code Online (Sandbox Code Playgroud) 我在使用 certbot-auto 更新我的证书时遇到了权限问题,因为每当它运行时都会显示以下消息:
Requesting to rerun certbot-auto with root privileges...
Run Code Online (Sandbox Code Playgroud)
它不需要以 root 身份运行,因为运行该命令的用户拥有 certbot 使用的所有目录的权限。我找不到任何命令行选项来禁用此功能,但查看脚本本身,我发现当它重新运行时,它会检查参数
--cb-auto-has-root,如果存在,它不会尝试(再次)获取根权限。我发现如果我用这个命令运行 certbot-auto ,它就像非 root 一样运行得很好!
但我不确定是否应该使用这个解决方法 - 因为它没有记录 - 或者将来会中断。作为非 root 用户运行的推荐方法是什么?
c ×2
firefox ×2
html ×2
arrays ×1
caching ×1
certbot ×1
colors ×1
css ×1
definition ×1
diff ×1
dropbox ×1
eval ×1
fennec ×1
file ×1
function ×1
guile ×1
https ×1
javascript ×1
lets-encrypt ×1
local ×1
mobile ×1
pointers ×1
quote ×1
scheme ×1
sqlite ×1
struct ×1
swig ×1
this ×1
weinre ×1
whitespace ×1