命令行中执行:
leaf@leaf-XiaoXinPro-16-IAH7:~/桌面/C++/testCode$ gcc hello.c -o hello
leaf@leaf-XiaoXinPro-16-IAH7:~/桌面/C++/testCode$ ./hello.c
bash: ./hello.c: 权限不够
原因分析:
你犯了一个特别经典、几乎每个C语言初学者都会踩的小错误,但问题不大,我一说你就明白了。
你执行的命令是 ./hello.c,但 hello.c 是你的源代码文件(文本文件),而不是编译后生成的可执行程序。
你成功的编译命令是 gcc hello.c -o hello,这条命令的意思是:“把 hello.c 编译成名为 hello 的程序”。
所以,编译成功后,当前目录下生成了两个文件:
-
hello.c(源代码,文本文件,你看得懂) -
hello(编译后的可执行文件,机器码,电脑看得懂)
✅ 正确的运行命令
你应该运行编译后生成的 hello,而不是 hello.c。
在终端输入:
./hello
按下回车,你就能看到输出 Hello, World! 了。
❓ 为什么会有“权限不够”的提示?
当你输入 ./hello.c 时,系统试图把 .c 文件当做程序来执行。
-
.c文件默认没有“可执行权限”(它只是个文本),所以系统直接报错“权限不够”。 -
就算你强行给
hello.c加上可执行权限(chmod +x hello.c),系统也无法执行它,因为里面的内容是给人类看的C语言语法,不是CPU能直接识别的二进制机器码。系统会报错./hello.c: line 1: #include: command not found之类的问题。
📌 总结一下日常操作命令
在终端里写C语言,永远记住这三步曲:
-
写代码:
gedit hello.c(或直接用VSCode写) -
编译:
gcc hello.c -o hello(生成可执行文件) -
运行:
./hello(注意:不加.c后缀!)
以后每次编译,都要记得
-o后面跟着的名字和运行时的名字必须一致。如果编译时写成gcc hello.c -o myapp,运行时就要敲./myapp。
现在试一下 ./hello,肯定能成功运行!以后编译和运行就不会再搞混了。