意外令牌附近的语法错误'('

时间:2016-03-08 05:13:04

标签: c linux

作为初学者,我正在尝试编写一个简单的c程序来学习和执行“写”功能。

我正在尝试执行一个简单的c程序simple_write.c

#include <unistd.h>
#include <stdlib.h>
int main()
{
    if ((write(1, “Here is some data\n”, 18)) != 18)
         write(2, “A write error has occurred on file descriptor 1\n”,46);
    exit(0);
}

我也执行chmod + x simple_write.c

但是当我执行./simple_write.c时,它会在意外令牌附近给出语法错误'('

无法弄清楚为什么会这样?

P.S:预期的输出是: -

$ ./simple_write
Here is some data
$

3 个答案:

答案 0 :(得分:6)

你做了

$ chmod +x simple_write.c
$ ./simple_write.c

什么时候应该完成

$ cc simple_write.c -o simple_write
$ chmod +x simple_write                 # On second thought, you probably don’t need this.
$ ./simple_write

用文字: 编译 程序来创建可执行文件simple_write没有 .c )文件,然后运行它。 你所做的是尝试执行你的C源代码文件 作为shell脚本。

注意:

  • simple_write文件将是二进制文件。 不要使用适用于文本文件的工具来查看它 (例如,catless或文本编辑器,例如gedit)。
  • cc是C编译器的历史名称。 如果你得到cc: not found(或等价物), 再次使用gcc(GNU C编译器)尝试该命令。 如果这不起作用,

    • 如果您使用的是共享系统(例如学校或图书馆), 询问系统管理员如何编译C程序。
    • 如果您在个人电脑上(即您是管理员), 你需要自己安装编译器(或者让朋友去做)。 有很多关于此的指导;只是搜索它。
  • 当你开始编写更复杂的程序时, 你将要使用

    make simple_write
    

    具有

    的优点
    • 能够编排多步构建, 这是复杂程序的典型,
    • 它知道在该系统上编译程序的标准方法 (例如,它可能“知道”是否使用ccgcc)。

    事实上,你现在应该可以使用上面的命令了。 这可能(或可能不)简化您的生活。

P.S。现在这个问题出现在Stack Overflow上, 我被允许谈论它的编程方面。 在我看来它应该编译,但

  • 第一个write行的括号多于所需的括号。

    if (write(1, "Here is some data\n", 18) != 18)
    

    应该有用。

  • 在第二行write行中, 我将字符串计为48个字符,而不是46个。
  • 顺便问一下,你知道如何让第一个write失败, 所以第二个会执行?尝试

      

    ./simple_write >&-

答案 1 :(得分:5)

您无法直接在Linux(或其他系统)中执行C源代码。

C是一种需要编译为二进制格式的语言。

您需要安装C compiler(实际程序因您的系统而异),编译您的程序,然后才能执行它。

目前它是由shell解释的。以#开头的前两行被忽略为注释。第三行导致语法错误。

答案 2 :(得分:-1)

确定,

我得到了我做错的事。

这些是我为纠正问题而采取的步骤: -

  1. $ gedit simple_write.c

  2. 将代码写入此文件并保存(扩展名为.c)。

  3. $ make simple_write

  4. $ ./simple_write

  5. 我得到了理想的输出。

    谢谢!