初学者的hello world C程序?

use*_*976 5 c

作为初学者,我在Code :: Blocks上键入以下hello world程序 -

#include<stdio.h>
main()
    {
        printf("Hello world \n");
    }
Run Code Online (Sandbox Code Playgroud)

现在,我点击"Build and Run",输出屏幕显示"Hello world".

但是,我正在阅读的这本书建议我删除程序的某些元素,以查看程序中发生的错误.

我做了2次更改.首先,我从程序中删除了\n.(这本书告诉我,如果没有\n,运行程序时会出错)但是,当我点击"Build and Run"时,输出屏幕会给出与它没有任何错误时相同的输出.

我做的第二个更改是从程序中删除#include.即使是现在,输出屏幕也会显示与没有错误时相同的输出.

为什么会这样?请告诉我如何解决这个问题?

我使用的编译器是GNU GCC编译器.

编辑:正如所建议的,我添加了-wall,-wextra,-pedantic.现在,当我点击"Build and Run"时,它说找不到-1-wall,-1-wextra和-1-pedantic,程序也没有运行.现在该怎么解决?

rak*_*rul 5

情况一:你的书错了。删除\n永远不会引发任何错误。\n表示换行符,它将在Hello World之后打印一个新行。

情况 2:您可能不会再次构建代码,因为如果不包含stdio(意味着标准输入/输出),如果您使用较新的 C 标准(C99、C11),您可能无法调用printf()函数。阅读有关stdio.h的更多信息。

请注意,在 C99 之前的标准中,如果删除原型 ( #include <stdio.h>),C 将自动为函数提供隐式声明。看起来像这样:

int printf();
Run Code Online (Sandbox Code Playgroud)

意味着,它将接受任意数量的参数并返回int。但在 C99 中,隐式减速被删除。所以很可能你的编译器不面对 C99。

看看这里,编译没问题!

阅读有关c 中隐式声明的更多信息。

编辑:正如 AnT 在评论中提到的,删除#include<stdio.h>,对 printf 的调用将在 C99 之前版本的语言中“编译”。但是,该调用将产生未定义的行为。即使在 C89/90 中,可变参数函数(如 printf)也必须在调用之前用原型声明。否则,行为是未定义的。


Sil*_*mra 0

删除 \n 不会出现任何问题,因为“\n”是换行符。所以之前你的输出是**“Hello World

“**(换行符)现在你的输出是 “Hello World”, 这就是为什么你看不到任何差异。