用C/C++编写的Windows GUI应用程序将'WinMain'作为入口点(而不是'main').我对此的理解是编译器生成一个'main'函数,由C Runtime调用.这个'main'函数为GUI设置必要的环境并调用'WinMain'(指定实例句柄等).
简而言之,我认为控制台和GUI应用程序的启动方式有以下不同之处:
控制台应用程序:C运行时 - >'主'功能(手动编码)
GUI应用程序:C运行时 - >'main'函数(编译生成) - >'WinMain'函数(手工编码)
我想验证这种理解并找出如何用一个'main'函数手动编写Windows GUI(即无需编写'WinMain').
导致此错误的原因是什么?我google了它,我发现的前几个解决方案是库和主要功能有问题,但在我的问题中似乎都很好,我甚至重新输入了两个!可能是什么导致了这个?
这可能会有所帮助:
MSVCRTD.lib(crtexew.obj):错误LNK2019:函数_ _tmainCRTStartup中引用的未解析的外部符号WinMain @ 16
#include <iostream>
using namespace std;
int main()
{
const double A = 15.0,
B = 12.0,
C = 9.0;
double aTotal, bTotal, cTotal, total;
int numSold;
cout << "Enter The Number of Class A Tickets Sold: ";
cin >> numSold;
aTotal = numSold * A;
cout << "Enter The Number of Class B Tickets Sold: ";
cin >> numSold;
bTotal = numSold * B;
cout << "Enter The Number of …Run Code Online (Sandbox Code Playgroud) 今天我刚刚创建了一个Java库.我使用Main类创建它,因为IntelliJ IDEA 14要求我添加一个.但是我希望它是一个普通的库,没有任何Main类.是否可以从这样的项目创建一个jar文件,而没有一个带有main方法的类?如果是这样,你如何创建这样一个罐子.
如果你从不使用它,那么拥有一个main方法似乎有点傻.
情况1:
void hello(void) {
//something
}
int main()
{
hello(1); //error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
案例2:
int main(void) {
//something
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行:
./a.out something something //No error, Why?
Run Code Online (Sandbox Code Playgroud)
为什么没有错误?main将无法采取任何论点.那么为什么可以从命令行提供参数呢?
我写了一个简单的模块叫做Test:
module Test (main) where
main =
putStrLn "Hello"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过以下命令行编译它时:
ghc Test.hs -o my-program
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[1 of 1] Compiling Test ( Test.hs, Test.o )
<no location info>: error:
output was redirected with -o, but no output will be generated because there is no Main module.
Run Code Online (Sandbox Code Playgroud) 很多人都熟悉C语言中的hello world程序:
#include <stdio.h>
main ()
{
printf ("hello world");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么有些在main()函数之前,int如下所示:
int main()
Run Code Online (Sandbox Code Playgroud)
另外,我已经看到void输入的内容()如下:
int main(void)
Run Code Online (Sandbox Code Playgroud)
这似乎是额外的打字,但也许这是一个在其他情况下支付红利的最佳做法?
另外,main()如果你要返回一个字符串,为什么会先加一个int?如果有的话,人们会期望:
char main(void)
Run Code Online (Sandbox Code Playgroud)
关于为什么我们在函数结束时返回0也很模糊.
我听到有人说"如果main不是静态的,那么JVM可以创建一个包含main的类的对象,并通过对象调用main.
但问题是JVM如何知道在重载构造函数的情况下调用哪个构造函数,或者即使有只有一个参数化的构造函数,然后才能通过."
这是正确的理由吗?
因为如何在不进入主函数的情况下创建类的对象?
请就此发表意见.如果这不是正确的理由,那么正确的原因是什么?
当我打电话pthread_exit时main,程序永远不会终止.我期望程序完成,因为我退出程序的唯一线程,但它不起作用.好像挂了.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int main(int argc, char *argv[])
{
printf("-one-\n");
pthread_exit(NULL);
printf("-two-\n");
}
Run Code Online (Sandbox Code Playgroud)
Process Explorer显示(仅)线程处于Wait:DelayExecution状态.
根据pthread_exit文件:
在最后一个线程终止后,进程将以退出状态0退出.行为应该就像实现在线程终止时调用带有零参数的exit()一样.
我正在使用Dev-C++ v4.9.9.2和pthreads-win32 v2.8.0.0(链接libpthreadGC2.a).
该库似乎是确定(例如,呼叫pthread_self或pthread_create从main正常工作).
是否有什么我不应该调用任何理由pthread_exit从main?
它表示非静态变量不能用于静态方法.但是public static void main.如何?
我的主要功能如下:
int main(int argc, char const *argv[])
{
huffenc(argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器返回警告:
huffenc.c:76: warning: passing argument 1 of ‘huffenc’ discards qualifiers from pointer target type
作为参考,huffenc接受char*输入,并执行该功能,样本输入"无意识"通过./huffenc senselessness
这警告意味着什么?