【问题标题】:Compiler error in C code that I cannot understand [duplicate]我无法理解的 C 代码中的编译器错误 [重复]
【发布时间】:2015-02-25 22:54:49
【问题描述】:

我写了这段代码:

short foo(short a)
{
short b,c;
b=10;

c = a + b;

return c; 
}

我得到一个编译器错误:

usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../lib64/crt1.o: In function `_start':                                                                                                                        
(.text+0x20): undefined reference to `main'                                                                                                                                                                   
collect2: error: ld returned 1 exit status  

我哪里出错了?

这里是不确定的吗?我对 C 编程不太熟悉,所以请原谅我对一些明显的事情一无所知。

【问题讨论】:

  • 我假设您打算使用-c 选项进行编译,而main 在另一个文件中。
  • 您有多个帐户要问同一个问题stackoverflow.com/questions/28729505
  • 我需要一个快速的答案,我不被允许再次提问。我是新来的,我无法弄清楚要做什么。我之前的问题被搁置了,我不知道如何删除它。我删除了上一个问题。

标签: c debugging


【解决方案1】:

这不是编译器错误,而是链接器错误。您显示的代码没有损坏,它不完整。留言

undefined reference to `main'

告诉你你还没有定义一个main函数,这是程序的起点。添加

int main(void) {
  // code here that is supposed to run when the program is executed
}

到代码。

【讨论】:

  • 你能告诉我什么时候我将'a'定义为堆栈变量并将其更改为short foo(short a)到short foo()吗?这两种初始化有什么区别??
  • a in short foo(short a) 是一个函数参数,因此调用foo(10) 将进入foo 并将a 设置为10。如果您将foo 声明为short foo(),则可以将其调用为foo()(不带参数),并且如果您在foo 中本地声明a,它将具有您在那里赋予它的任何值(或一个未指定的,如果你不给它一个)。但这与您关于链接器错误的问题有什么关系?
  • 我试图通过分别运行这两个代码来比较你的两个代码,以了解它们是如何编译的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2021-10-13
  • 2022-11-13
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多