我有一种情况,我希望从用户获得一个正则表达式,并针对几千个输入字符串运行它.在手册中,我发现该RegExp对象有一种.compile()方法可用于加速这种情况.但是,如果我已经在构造函数中传递了它们,为什么我必须再次将regexp字符串传递给它?也许构造函数compile()自己做?
我仔细研究了可能的副本,但是没有任何答案在沉没.
tl; dr:源文件和头文件是如何相关的C?项目是否在构建时隐式地整理声明/定义依赖项?
我试图理解编译器如何理解.c和.h文件之间的关系.
鉴于这些文件:
header.h:
int returnSeven(void);
Run Code Online (Sandbox Code Playgroud)
source.c:
int returnSeven(void){
return 7;
}
Run Code Online (Sandbox Code Playgroud)
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void){
printf("%d", returnSeven());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个混乱会编译吗?我目前正在使用Cygwin的gcc在NetBeans 7.0中完成我的工作,它可以自动执行大部分构建任务.编译项目时,涉及的项目文件是否根据声明中的隐含包含?source.cheader.h
Stack Overflow上的一个问题的答案(见下文)给了我一个很棒的小软件的想法,这对于所有编码器来说都是非常宝贵的.
我正在想象RAM驱动器软件,但有一个关键的区别 - 它将镜像我硬盘上的真实文件夹.更具体地说 - 包含我正在处理的项目的文件夹.这样,任何构建几乎都是瞬时的(或者至少快几个数量级).RAM驱动器将仅使用空闲资源将其内容与后台硬盘驱动器同步.
一个快速的谷歌搜索没有透露,但也许我只是不知道如何谷歌.也许有人知道这样的软件?最好免费,但合理的费用也可以.
补充:已经提出了一些我在一开始就丢弃的解决方案.他们将(没有特别的顺序):
补充2:出现了一个想法 - 使用普通的RAM驱动器加上后台文件夹同步器(但我的意思是背景).有这样的事吗?
补充3:有趣.我刚刚尝试了一个简单的RAM驱动器.重建时间从大约14秒下降到大约7秒(不差),但增量构建仍然在~5秒 - 就像在HDD上一样.有什么想法吗?它使用aspnet_compiler和aspnet_merge.也许他们在其他地方做其他临时文件?
补充4:哦,很好的新答案!:)好的,我为你所有的反对者提供了更多的信息.:)
这个想法的主要原因之一不是上述软件(14秒构建时间),而是另一个我当时无法访问的软件.这个其他应用程序有100 MB的代码库,其完整版本大约需要5分钟.啊,是的,它在Delphi 5中,所以编译器不太先进.:)将源放在RAM驱动器上导致了巨大的差异.我想,我得到它的时间不到一分钟.我没有测量过.因此对于所有那些说操作系统可以更好地缓存内容的人 - 我会乞求不同.
相关问题:
关于第一个链接的注意事项: 它链接的问题已被删除,因为它是重复的.它问道:
你的代码编译时你做了什么?
我联系的Dmitri Nesteruk的答案是:
我几乎立即编译.部分原因是我的项目很小,部分原因是因为使用了RAM磁盘.
我在我的Bash脚本中调用了许多Perl脚本(有时也来自csh).
在Bash脚本的开头我想要一个测试,它检查所有Perl脚本是否没有任何编译错误.
实现此目的的一种方法是实际调用Bash脚本中的Perl脚本以及grep管道日志文件中的"编译错误",但由于在代码中的不同点调用不同的Perl脚本,这会变得混乱,所以我想要在Bash脚本的最开始执行此操作.
有没有办法检查Perl脚本是否没有编译错误?
我是C#的新手.我刚刚使用Visual Studio运行C#'Hello World'程序.
我可以在不使用Visual Studio的情况下运行或编译C#程序吗?
如果可能,那么我应该使用哪个编译器?
谢谢
我的MS Visual C#程序正在编译并运行得很好.我关闭了MS Visual C#,以便在生活中做其他事情.
我重新打开它(在做任何其他事情之前)去"发布"我的程序并得到以下错误消息:
程序C:\ myprogram.exe不包含适用于入口点的静态"Main"方法
咦?是的它确实......而且它们都提前15分钟工作了.当然,我可以相信,在我关闭之前,我不小心碰到了什么或做了什么......但是什么?我该如何解决这个问题?
我的Program.cs文件如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;
namespace SimpleAIMLEditor
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new mainSAEForm());
}
}
}
Run Code Online (Sandbox Code Playgroud)
......那里有一些评论.没有其他错误.
救命?
我知道Cythons的目的是什么.它是用类似Python的语言编写可编译的C扩展,以便在代码中产生加速.我想知道(并且似乎找不到使用我的google-fu)是因为Cython可以以某种方式编译成可执行格式,因为它似乎已经将python代码分解为C.
我已经使用了Py2Exe,它只是一个打包器,但我有兴趣使用它来编译一些有点难以解压缩的东西(任何使用Py2EXE打包的东西基本上只能使用我不想要的7zip提取)
看来,如果这是没有可能的我的下一个替代办法只是编译我的所有代码并加载它作为一个模块,然后,使用py2exe至少获得包装大多数我的代码为编译形式,对不对?
我们在平原开发了一些项目C(C99).但是,我们有一个库作为源代码(数学库)C++.我们需要这个库,所以我想问一下,集成这些源代码的最优雅方式是什么?
大小之比C,并C++正在20:1使移动C++是不是选项.我们应该使用静态库吗?DLL?(这都是在Windows上).
所以我正在尝试使用我文件(file2.c)中另一个C(file1.c)文件中定义的函数.我要包含file1(file1.h)的头文件才能执行此操作.
但是,每当我尝试使用gcc编译文件时,我都会收到以下错误:
Undefined symbols for architecture x86_64:
"_init_filenames", referenced from:
_run_worker in cc8hoqCM.o
"_read_list", referenced from:
_run_worker in cc8hoqCM.o
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
我被告知我需要"将目标文件链接在一起"才能使用file2中file1的功能,但我不知道这意味着什么:(
我知道有一个"用于Python 2.7的Microsoft Visual C++编译器",但目前或计划中是否有用于Python 3.4的Microsoft Visual C++编译器或用于Python 3.x的Microsoft Visual C++编译器?如果我不必在整个实验室安装不同版本的visual studio,那将是非常有益的.
compilation ×10
c ×3
c# ×2
python ×2
c++ ×1
caching ×1
cython ×1
directory ×1
gcc ×1
header-files ×1
javascript ×1
perl ×1
python-3.x ×1
ramdrive ×1
regex ×1
windows ×1