初学者的hello world C程序?

时间:2015-07-02 18:24:40

标签: c

初学者,我在Code :: Blocks -

上键入以下hello world程序
#include<stdio.h>
main()
    {
        printf("Hello world \n");
    }

现在,我点击“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,程序也没有运行。现在该如何解决这个问题?

7 个答案:

答案 0 :(得分:4)

案例1:你的书错了。删除\n绝不会引发任何错误。 \n表示newline,它将在 Hello World 之后打印一个新行。

案例2:可能您没有再次构建代码,因为如果不包含stdio(表示标准输入/输出),您可能无法调用printf()函数您使用较新的C标准(C99,C11)。详细了解stdio.h

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

int printf();

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

看看here,编译好!

详细了解implicit declarations in c

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

答案 1 :(得分:2)

  1. 您的程序已包含错误。必须使用显式指定的返回类型声明现代C中的函数。您的main()声明没有返回类型,自C99以来一直是非法的。

  2. 有不同种类的&#34;错误&#34;。某些错误会导致编译器发出诊断消息。某些错误只会使您的程序在运行时出现不可预测的行为(表现出未定义的行为)。后者可能更难以发现,因为&#34;不可预测&#34;第一眼看上去可能看起来很完美。

    在您的情况下,删除#include <stdio.h>将在C99​​-compiliant编译器中触发诊断消息,但在C89 / 90编译器中将导致仅仅未定义的行为。未定义的行为可能仍会产生与以前相同的屏幕输出。

答案 2 :(得分:0)

通过删除\ n,您没有看到任何问题,因为'\ n'是一个换行符。 所以以前你的输出是 **“Hello World

“**(换行) 现在你的输出是 “Hello World” 这就是为什么你没有看到任何区别。

答案 3 :(得分:0)

删除\n时未收到错误的原因是因为它是escape equence表示换行符。除非代码的其他部分不受影响,否则添加或删除转义序列不会导致错误。例如,如果您仅从\中删除\n,则会导致错误,因为您的"将被转义为\"

对于第二种情况,要么在运行之前没有再次构建代码,要么IDE会自行设置代码。删除#include行会导致错误,因为在printf()头文件中声明了stdio.h函数。如果没有函数声明,调用fucntion会导致错误。

如果您正在使用任何shell,最好是在文本编辑器中编写代码并使用shell中的gcc编译它:

gcc filename.c

可执行文件默认命名为a.out。有关gcc的更多信息,请参阅man gcc

答案 4 :(得分:0)

案例2:

如果printf()中没有#include<stdio.h>原型,许多编制者都会使用C99之前的标准。这假定函数具有int printf(...)的原型,其中所有参数(包括格式都通过通常的参数促销而没有类型检查)。由于代码传递了预期的格式参数并且返回了int,因此代码工作正常。如果代码为printf(5.0),则可能会编译但执行时崩溃。

答案 5 :(得分:0)

从“Hello world \ n”中删除“\ n”不会产生任何错误,但 MAY 会在执行时产生不同的结果。根据操作系统的不同,它可能会在下一次将“\ n”发送到stdout或直到输出缓冲区刷新时才写入任何内容。

答案 6 :(得分:0)

#include<Stdio.h> 
//this contains the function used to print which is printf(); also puts();
int main()//The the main function in code simply the one with highest importance
{//opening braces
printf("hello world\n");//this prints the word and \n enters a newline
puts("hello world");//does the exact same thing
return 0; //means if the program runs correctly then return the no zero to screen
}//closing braces
//anything that has those 2 forward slashes are comments and they aren't compiled