【发布时间】:2019-06-24 16:33:47
【问题描述】:
有 3 个文件-
1.atm.c(源文件)
2.transactions.h(函数声明)
3.transactions.c(定义函数)
当我编译(GCC)时,我收到WinMain 错误。
我尝试了所有我知道的方法,我可以编译程序。
例 1:
gcc -o atm.c transactions.c transactions.h //atm.c 正在以这种方式被删除。
Ex 2:因为我已经在源代码中包含了文件(.h),所以我没有在编译时给出 .h:
gcc -o atm.c transactions.c //在这种情况下,文件没有被删除,而是出现WinMain 错误。
** 输出:**
gcc -o atm.c transactions.c transactions.h
C:/crossdev/src/mingw-w64-v4-git/mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status
atm.c:
#include "transactions.h"
int main(void) {
initializeAccount();
getBalance();
//Perform first transaction
askCustomer();
updateAccount(amount);
getBalance();
//Perform second transaction
askCustomer();
updateAccount(amount);
addGift(5.0);
getBalance();
//Perform third transaction
askCustomer();
updateAccount(amount);
addGift(2.0);
getBalance();
thankYou();
return EXIT_SUCCESS;
}
transactions.h:
#include <stdio.h>
#include <stdlib.h>
#ifndef TRANSACTIONS_H_
#define TRANSACTIONS_H_
float accountBalance, amount;
void initializeAccount();
void getBalance(void);
void askCustomer(void);
void updateAccount(float value);
void addGift(float giftAmount);
void thankYou(void);
#endif
transactions.c:
#include <stdio.h>
#include <stdlib.h>
float accountBalance, amount;
void initializeAccount(void){
accountBalance = 0.0;
}
void addGift(float giftAmount){
accountBalance += giftAmount;
printf("A gift of $%.2f has been added to your \n",giftAmount);
}
void askCustomer(void){
printf("Next transaction please...\n");
printf("Enter amount to credit (positive) or debit (negative):");
scanf("%f",&amount);
}
void getBalance(void){
printf("\ncurrent balance is $%.2f\n", accountBalance);
}
void updateAccount(float amount){
accountBalance += amount;
printf("The account was updated with $%.2f\n",amount);
}
void thankYou(void){
printf("------ Thank you! ------");
}
【问题讨论】:
-
WinMain是 Windows GUI 程序的入口点。您必须为使用main作为程序入口点的控制台程序进行编译。 -
您应该将标头中的变量声明为
extern:extern float accountBalance, amount;。仅在标头 (.h) 文件中。 -
@PaulOgilvie 你到底建议我做什么?当你说控制台程序时。?我该如何编译请帮助我被困在这个问题上。
-
包含防护也应该包含整个文件;所以,
#include <whatever.h>应该放在#ifndef里面,因为包含一些无论如何都不会使用的标题是无稽之谈。 -
很抱歉在这里帮不了你,因为我不懂gcc。我添加了 gcc 标签。也许大师可以回应。
标签: c gcc linker mingw-w64 winmain