- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
先从命令行参数讲起吧。
现今的人们,尤其是写大型的项目,一般都用IDE。我们没那么高级,只是先从一个编译器做起,不需要IDE。对于编译器的调用,本质就是给一个源代码进去,经过对源代码进行分析,然后出来一个结果。那么对于源代码文件,传送给编译器,一般使用命令行参数。
C:\> gcc test.c -o test
一般我们调用都是直接写一个exe的名称,这里,在名称后面加上的各种东西了例如"test.c","-o",这些就叫做参数。而在调用exe的时候,加上的参数一般称为命令行参数。参数就是告知编译器一些信息的。
如何获取这些参数呢?对于C和C++,获取命令行参数是直接通过main函数获取的:
int main(int argc,char** argv){
}
把main函数声明成这种形式,就能获取命令行参数。其中,argc表示参数的数量,argv是一个指针数组(指针的指针),写法是char** argv
,也有写作char *argv[]
的,两种方式含义相同,其中从argv[0]开始一直到argv[argc-1],都是字符串,保存的就是参数。
一般来说,argv[0]存放这个exe的名称,而argv[1]开始就是第一个参数了,我们可以通过调用argv[1]来获取我们需要编译的代码。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
using namespace std;
int main(int argc,char** argv){
if(argc!=2){
printf("The syntax of the command is incorrect.\n");
exit(1);
}
FILE *fp=fopen(argv[1],"r");
return 0;
}
代码的主体结构就是这样了。
然后,我们就可以开始正式读入我们的东西了。在此之前,为了方便我们的后续,也是为了仿制汇编语言更加像一些,我决定在里面做一些东西:寄存器。
寄存器其实在汇编语言里面有很多,例如EAX,EBX,ESI,EDI,SS,DS,CS等,毕竟我们只是乱做,寄存器其实也是汇编里面非常接近硬件的东西,(话说C可以内嵌汇编,也就是说这些东西一定程度上我们还是可能实现的)我们就没必要设太多,就设:
eax ebx ecx edx esi edi ebp esp
对了,还有一个eip,用于存放指令的地址,这里我们就不是指令了,而是读入的语句(或者说单词),我们把读入的单词全部放入数组,用eip变量指向这个数组就可以了,eip主要是在后面写跳转的时候用处比较大,现在暂时无法体现出来。
使用一个循环来读入所有的单词,我们这里由于实现的东西比较简单,其实也不需要做词法/句法上的判断,至于词法/句法执行时再做判断,这样也轻松一些。(其实不就是懒
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
using namespace std;
typedef string Word;
int eax,ebx,ecx,edx,esi,edi;
int *ebp,*esp;
Word *eip;
Word wd[32768+10];
int main(int argc,char** argv){
if(argc!=2){
printf("The syntax of the command is incorrect.\n");
exit(1);
}
FILE *fp=fopen(argv[1],"r");
eip=wd;
for(;;){
char s[100];
int i=fscanf(fp,"%s",s);
if(i==EOF)break;
*eip=s;++eip;//*eip就是读取的指令单词 ,存储在wd数组中
}
return 0;
}
我们规定使用"end"字符串来结束代码,经过简单的加工,最终写出来的代码是这样的:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
using namespace std;
typedef string Word;
int eax,ebx,ecx,edx,esi,edi;
int *ebp,*esp;
Word *eip;
Word wd[32768+10];
Word getword(){
return *(eip++);
}
int main(int argc,char** argv){
if(argc!=2){
printf("The syntax of the command is incorrect.\n");
exit(1);
}
FILE *fp=fopen(argv[1],"r");
eip=wd;
for(;;){
char s[100];
int i=fscanf(fp,"%s",s);
if(i==EOF)break;
*eip=s;++eip;//*eip就是读取的指令单词 ,存储在wd数组中
}
eip=wd;
for(;;){
Word s=getword();
if(s=="end"){
exit(0);
}
}
return 0;
}
未完待续。
我正在使用Delphi 7,并且有一个新单元要在我的项目中使用。我已经编译了新的。当我尝试通过将其添加到uses子句在项目中使用此单元时,出现错误,提示未找到.dcu文件。我还尝试将文件的完整路径放在
我有一个项目正在使用 mysql_connect()。 (我无法将其更改为 mysqli) 我收到错误:Call to undefined function mysql_connect() 我已经使用
我现在正在学习 jQuery,第一个“更大”的项目是一个自制的 Accordion /滑动导航。 我的 HTML 代码如下所示: Prologue TEST Projekte
我得到了这段用 JavaScript 编写的代码,但是对于大输入它返回了错误的数字。 它应该用模(mo)计算指数(ex)幂的底数。 我用 C 编写了等效代码并且正在运行。请有人告诉我出了什么问题。 尝
我正在通读 How can I write a power function myself? dan04 给出的答案引起了我的注意,主要是因为我不确定 fortran 给出的答案,但我接受了它并实现了
更新:可能是 jQuery 的 trigger() 在测试中做了一些额外的工作,我打开了一个 issue在 github 上。 ===== 我正在关注 learnQuery构建我的简单 jQuery。
我尝试了各种图库插件,但没有一个适合我的需要。 我有一些标记如下:
为了熟悉 swift 语言和 Cocoa,我决定创建一个小的基数转换,首先从基数 2 到基数 10,然后我想添加一些其他基数,例如 16 和 5。我仍然无法使其正常工作:Running App Vie
我开始编写自己的 vector 类,然后着手重载 = 运算符。我在下面有类似 somevector = someothervector 的代码,尽管我不确定它是否正确,因为我一直在为类似 someve
这里有一些非常相似的问题,但是它们无法帮助我解决这个问题。 另外,我提供了完整的示例代码,因此其他人可能更容易理解。 我制作了一个 vector 容器(出于内存原因,不能使用STL),过去只将oper
我制作了自己的 vector 模板,operator[]一部分: template T& vector::operator[](unsigned int index) { return m_
我们知道我们不应该写 SELECT *;相反,应该写下确实将在业务逻辑中使用的列(例如,在有关整篇文章的一次查询中SELECT blog_title, blog_content,以及SELECT bl
我使用 netbeans,当我准备为应用程序用户的管理创建一个 bean 时,我开始想知道:哪种方式更有益,保留数据库表并在其上应用 EJB,还是创建一个处理与数据库的连接并“手动”进行测试的 bea
所以基本上,作为安全措施(和学习过程),我尝试做的是我自己的“Capthca”系统。发生的情况是我有 20 个“标签”(为简洁起见,下面仅显示一个),每个 ID 都在 1 到 20 之间。我的 jav
我有一个类,它本质上是一个 std::vector具有一些附加功能。类(class)有find(const T& value )返回 value 第一次出现索引的方法或-1: int my::find
最近几天,我一直在尝试使用 Python 进行一些音频开发。 问题是,Mac OSX 不能很好地处理卸载问题。实际上,没有办法卸载任何东西。一旦它出现在您的系统上,您最好祈祷它没有做任何有趣的事情。因
我不明白以下错误消息,但我知道我之前已经在 Linux 上安装了 utf8-light ,没有出现任何问题。有人可以阐明出了什么问题吗?这是 LLVM 问题、GHC 7 问题还是 utf8-light
我是一名优秀的程序员,十分优秀!