我决定自学“C”并在教程网站上看到一个非常简单的“示例”程序,我想我会在学习的同时建立它。代码在
之下/* hello.c*/
#include <stdio.h>
int main (int argc, char *argv[1]);
{
if (argc > 1)
printf("greetings %s.\n", argv[1]);
else
printf("Please tell me your name.\n");
return 0;
}
我正在尝试使用以下命令进行编译
gcc -Wall -o hello_program hello.c
每当我尝试编译时,都会收到以下错误。
“hello.c:5:错误:预期标识符或'('''''''''''''''''''''
我一直在做一些谷歌搜索,并没有得到一个坚实的答案。我是100%新的C(Linux / Bash / Unix是我的世界)和编程语言。错误消息让我相信编译器在第5行失败,并且它想要'('在'{'之前,我似乎无法获得正确的顺序。感谢您的帮助。
答案 0 :(得分:3)
该行
int main (int argc, char *argv[1]);
应该是
int main (int argc, char *argv[])
(没有分号)。
还可以考虑在if
语句中使用大括号。
答案 1 :(得分:2)
自从我使用C以来已经很长时间了,但我相信它应该是这样的:
/* hello.c*/
#include <stdio.h>
int main (int argc, char *argv[1])
{
if (argc > 1){
printf("greetings %s.\n", argv[1]);
}
else{
printf("Please tell me your name.\n");
}
return 0;
}
答案 2 :(得分:2)
基本上在'C'中,每个语句或声明/定义都以分号结束(除非它是一些特殊的)。在全局空间(不在函数中)中,您只能声明/定义(声明声明某些类型的东西存在并命名它,而定义也指出它的内容)。
该行
int main (int argc, char *argv[1]);
简单地声明一个函数而不是定义它(你在下一行写的代码没有被计算,但它被解释为下一个声明/定义 - 它不是)。
因此,在您的情况下,分号必须在函数定义之后。像这样:
#include <stdio.h>
int main (int argc, char *argv[1])
{
if (argc > 1)
printf("greetings %s.\n", argv[1]);
else
printf("Please tell me your name.\n");
return 0;
};
虽然如果你看一下标准,你会看到不需要最后一个分号。这是因为'C'对函数类型有特殊的容忍度。如您所见,函数'main'未使用等号('=')定义(与大多数其他类型一样),而是直接使用括号中的代码('{'[code]'}')。
另一件重要的事情是,所有数组/函数类型在函数中的处理方式都不同。在具有这种类型的参数的情况下,它被静默地“调整”为“指向”指针/“指向函数返回的指针”。并且在返回值的情况下 - 编译器错误(不允许这样的事情)。这意味着您的“主要”功能类型实际上是:
int (int, char **)
我建议你不要欺骗你的代码阅读器并实际编写实际的函数类型。
我并不认为我的描述是1:1的标准或任何东西 - 我只是解释我看到的东西。
出于某种原因,即使使用最后一个分号也不成问题。我想这是可能的,因为在'C'中你也可以有那些空语句(就像你只有终止分号一样)。