快速问题,有什么方法可以随心所欲地调用主要方法吗?或者它必须被称为"Main()"?
我想知道创建额外的主要方法会对您的代码产生什么影响.
例如,
public class TestClass {
public static void main (String[] args){
TestClass foo = new TestClass();
}
}
Run Code Online (Sandbox Code Playgroud)
程序最初启动后,将创建foo,并在其中包含另一个公共main方法.这会导致任何错误吗?
说到java类中的order/sequence方法.你期望/更喜欢看main()哪种方法?
请分享你的想法,这是一种风格/哲学问题.请不要建议main()单独保存在单独的文件中.
我想从另一个包访问主包,但这是不可能的,因为主文件不在目录中.我已经尝试将主文件放在一个目录中,但是当我尝试导入它时,我收到此错误:
import "../main" is a program, not an importable package
我想要这个的原因是因为我有一个tcp服务器和一个协同工作的网络服务器.Web服务器可以通过主程序包获取tcp服务器,tcp服务器可以通过主程序包获取Web服务器.
我已经让它与webserver和tcpserver相互阅读(中间没有主程序包),但是我想在一个地方保留应用程序的某些部分.
是我想要的东西(通过主包)?或者它只是愚蠢.
在我目前正在进行的数据结构类中,我们的任务是使用C++编写Web爬虫.为了给我们一个良好的开端,教授为我们提供了一个程序,用于从给定的URL获取源代码,并使用简单的HTML解析器来剥离标记.该程序的主要功能接受参数,因此使用argc/argv.用于检查参数的代码如下:
// Process the arguments
if (!strcmp(option, "-h"))
{
// do stuff...
}
else if (!strcmp(option, ""))
{
// do stuff...
}
else if (!strcmp(option, "-t"))
{
// do stuff...
}
else if (!strcmp(option, "-a"))
{
// do stuff...
}
if ( *argv == NULL )
{
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
其中"选项"已用argv [1]中的开关填充,而argv [2]和更高版本具有剩余参数.我理解的第一个块就好了,如果开关等于字符串做什么基于开关.我想知道最后一个if块的目的是什么.
可能是我的C++有点生疏,但我似乎记得*argv等同于argv [0],基本上意味着它正在检查以确保参数存在.除了我的印象是argv [0]总是(至少在大多数实现中)包含正在运行的程序的名称.我发现如果argc等于0,argv [0]可能为null,但是在Google上搜索我找不到确定是否可能的单个帖子.
所以我转向你.如果块检查,那究竟是什么?
编辑:我已经使用了所选答案的注释中提供的推理,有可能故意导致argv [0]变为NULL,或者基于特定于平台的main实现变为NULL.
如果在ruby文件中我定义了这样的函数:
def tell_the_truth()
puts "truth"
end
Run Code Online (Sandbox Code Playgroud)
有没有相当于python的主要?
if __name__ == "__main__":
tell_the_truth()
Run Code Online (Sandbox Code Playgroud)
是简单地调用文件中的函数吗?
tell_the_truth
Run Code Online (Sandbox Code Playgroud) 可能重复:
主要的正确声明是什么?
这个main函数中的参数是什么意思?他们想告诉我们什么?
int main(int argc, char** argv)
更新:并且,前面的代码行是否类似于此int main(int argc, char* argv[])?如果是这样,我们怎么能说char** argv类似char* argv[],因为他们不看从类似阵列的观点?
如何与int main()没有任何论据进行比较?
谢谢.
在main调用之前执行代码绝对是可能的,正如本问题中的许多示例所示.
但是,如果在该主要代码之前,程序被告知通过std::exit或退出std::abort?既然main被定义为程序的开始,那么在开始之前退出会产生什么后果?
在每个部分打印一些东西后,我得到以下结果:
格式:
部分:output
Main:main
Init(在main之前调用):init
Exit(std::atexit在Init内部设置):exiting
样品运行:
在不退出的情况下调用Init:
init
main
返回0
Init调用std :: exit(0):
init
返回0
Init调用std :: abort:
init
崩溃并在Windows上返回3,GCC 4.7.2
崩溃,并在LiveWorkSpace上显示VS11 返回0 的常用框
Init设置处理程序并调用std :: exit(0):
init
退出
返回0
Init设置处理程序并调用std :: abort:
如果没有处理程序,初始化
相同
在搜索时,我看到了这样一个问题:在main()之前,C/C++程序有什么方法可以崩溃吗?.但是,它没有回答我想知道的事情:这种行为是在调用之前std::exit还是std::abort以前main定义好的?这种未定义的行为是什么?
我有一些软件的示例目录,其中包含多个具有多个main功能的文件.我可以将所有这些文件组装成单个项目,编译它们然后运行特定的文件而不会main already defined出错吗?假设我不想为每个cpp文件创建单独的项目.
UPDATE
我需要简单的一键式解决方案(如果存在).我不想在文件夹或重构文件内容之间分发文件.例如,在Eclipse/Java中,您可以右键单击任何带有main的文件并运行它.并且在一个项目中可以有许多主文件.这可能是VisualStudio/CPP吗?
更新2
我知道C++不是Java,而Visual Studio不是Eclipse.我的问题是关于一些手动操作的自动化.
当您使用最新的 .NET Framework 创建新应用程序时,Program.cs 如下所示:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Run Code Online (Sandbox Code Playgroud)
如果您想知道 - 这实际上是整个文件。不public class Program; 不包括;没有构造函数。回到“那天”,这一切都被包含在Main名为 的类的函数中Program,如下所示:
public class Program
{
public async static Task Main(string[] args) …Run Code Online (Sandbox Code Playgroud)