我试图自学一些C语言,而我几乎陷入了xCode的困境。目前,我的文件夹结构如下所示:
main.c看起来像这样:
$("#btn4").click(function(){
$("#content").slideUp("slow", function(){
$("#content").html(`<h2>Tickets</h2><table width="200" border="1">
<tbody>
<tr>
<td> </td>
<td><p>Super Early Bird</p>
<p>Ends Dec 23, 2018 </p></td>
<td><p> Early Bird</p>
<p>Ends Mar 3, 2019 </p></td>
<td><p> Regular</p>
<p>After Mar 3, 2019 </p></td>
</tr>
<tr>
<td><p>Conference</p>
<p>The most popular option.</p>
<p>(Price listed is per ticket) </p></td>
<td>$599 </td>
<td>$699 </td>
<td>$799 </td>
</tr>
<tr>
<td><p>Conference- 4 Packs</p>
<p>Buy 4 at once and SAVE.</p>
<p>(Price listed is per ticket) </p></td>
<td>$499</td>
<td>$599 </td>
<td>$699 </td>
</tr>
<tr>
<td><p>Freelancer</p>
<p>A full 3 day conference ticket for thise who do not work full time for a single company or client </p></td>
<td> $399</td>
<td> $499</td>
<td> $599</td>
</tr>
<tr>
<td> Non-Profit/ Academic/ Military/ Government Discount <br>
<br>
A full 3 day conference ticket that is discounted for those who work at an NFP, a school, or the government or military. *Proof of employment required.</td>
<td>$499 </td>
<td>$599 </td>
<td>$699 </td>
</tr>
<tr>
<td><p>The WORKS </p>
<p>Includes the 3 day conference (April 29-May 1, 2019) plus the workshop day (April 28) </p></td>
<td>$799 </td>
<td>$899 </td>
<td>$999 </td>
</tr>
<tr>
<td><p>FITC EXCLUSIVE - </p>
<p>New for 2019 </p>
<p>• Very limited quantity</p>
<p> • Access to Exclusive sessions</p>
<p> • Invites to Exclusive Parties</p>
<p> • Exclusive swag</p>
<p> • Skip the line pass pickup </p>
<p>• Extra drink tickets for evening events </p>
<p>• Plus more exclusive perks to be revealed! </p></td>
<td>$899 </td>
<td> $999</td>
<td> 1099</td>
</tr>
<tr>
<td><p>FLEX </p>
<p>A transferable conference ticket. (April 29-May 1, 2019) </p></td>
<td> $699</td>
<td> $799</td>
<td>$899 </td>
</tr>
<tr>
<td><p>FLEX - 4 Pack Buy </p>
<p>4 tickets and save. (Price listed is per ticket) </p></td>
<td> $599</td>
<td>$699 </td>
<td>$799 </td>
</tr>
<tr>
<td><p>Workshop Only </p>
<p>Access to one of our workshops (April 28). $199 $249 $349 </p></td>
<td> $199</td>
<td>$249 </td>
<td>$349 </td>
</tr>
<tr>
<td>One Day Only <br>
Attend one day of FITC Toronto 2019. Includes access to all three evening events. </td>
<td>n/a </td>
<td> n/a</td>
<td>$399 </td>
</tr>
</tbody>
</table>`)
.slideDown("slow");
});
});
concrete.c看起来像这样:
#include <stdio.h>
int main(void)
{
int dogs;
printf("How many dogs do you have?\n");
scanf("%d", &dogs);
printf("So you have %d dog(s)! \n", dogs);
return 0;
}
无论我是通过Product-> Run运行哪一个,都会遇到相同的错误:
任何想法是什么原因造成的?仅来自Python背景,因此这些错误和xCode通常对我来说是全新的
编辑-删除concrete.c文件可解决此问题,但是对我而言,这似乎不合理。那是因为我有2个带有int main(void)的文件吗?
答案 0 :(得分:1)
当您单击Xcode上的“链接器命令失败,退出代码为1”时,它应该向您显示构建日志中链接器显示消息并以代码1退出的部分。
这些消息包括:
duplicate symbol _main in: [Some path on your system…]/Build/Intermediates.noindex/foo.build/Debug/foo.build/Objects-normal/x86_64/foo.o [Some path on your system…]/Build/Intermediates.noindex/foo.build/Debug/foo.build/Objects-normal/x86_64/main.o ld: 1 duplicate symbol for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
该消息“重复的符号_main”告诉您问题:您有main
的两个定义。 main
是用于启动程序的唯一例程的名称,并且您应该仅对其定义一个。
默认情况下,在C语言中,函数名称具有外部链接,这意味着在不同的翻译单元(源文件,通常使用时)中,相同的名称表示相同的事物。因此,不能有两个具有相同名称的函数-任何名称,而不仅仅是main
-因为那样,您就有两个具有相同名称的东西。您可以通过使用静态声明功能来为函数提供内部链接,而不是外部链接,这样该名称将不会与其他翻译单元中的相同名称冲突。
尽管如此,定义static
的{{1}}版本可能会导致编译器投诉,既不应main
声明main
,也应将其声明为如果您另外声明,则返回static
。这些源自C标准的文本,在C 2018 5.1.2.2.1 1:
在程序启动时调用的函数名为
int
。该实现没有为此函数声明任何原型。它应使用返回类型main
定义,并且不使用任何参数:…或使用两个参数(此处称为int
和argc
,尽管可以使用任何名称,因为它们对于声明它们的函数而言是局部的):…
尽管该文本限制了argv
的声明,但在我看来,它可以解释为是指具有外部链接的main
,而不是偶然碰巧被声明为{{1 }}。尽管如此,将知名的特殊用途名称重用于其他用途通常是一种不好的做法。