这是什么类型的代码? C或C ++

时间:2017-04-20 18:52:16

标签: c++ c

我为自己的练习目的编写了一些代码,但有趣的事情发生了。我原本试图编写一个C ++代码,但是我忘记了包含streamio库和使用命名空间std,然后我在编码期间一直使用printf()函数。

我认为对我来说最令人困惑的部分是我使用.cpp扩展并使用VS 2015编译器编译此程序但我实际上是用C风格编写的。有人能告诉我,我写过C或C ++代码吗?

以下是源代码:

#include "stdafx.h"
#include <stdlib.h>


typedef struct node
{
    int data;
    node *next;
}node;

node *create()
{
    int i = 0;
    // Each variable must be assign to some value in the function
    node *head, *p, *q = NULL;
    int x = 0;
    head = (node *)malloc(sizeof(node));

    while (1)
    {
        printf("Please input the data: ");
        scanf_s("%d", &x);
        if (x == 0)
            break;
        p = (node *)malloc(sizeof(node));
        p->data = x;
        if (++i == 1) {
            head->next = p;
        }
        else
        {
            q->next = p;
        }
        q = p;
    }
    q->next = NULL; 
    return head;
}

void printList(node head)
{
    node *tmp = &head;
    int counter = 0;
    printf("Print out the list: \n");
    while (tmp->next != NULL) {
        tmp = tmp->next;
        counter++;
        //surprise to me printf() is pretty advance...
        printf("%d item in the list: %d\n",counter, tmp->data);
    }
}

int main()
{
    printList(*create());
    return 0;
}

1 个答案:

答案 0 :(得分:5)

据我所知,您的代码是有效的C ++。它不是有效的C,但只需要很少的努力就可以成为有效的C.

C 几乎是 C ++的一个子集,但是有效的C代码不是有效的C ++代码 - 当然还有很多的有效C ++代码有效的C代码。

使您的代码无效为C的一件事是使用名称node

typedef struct node
{
    int data;
    node *next;
}node;

在C ++中,struct node定义使该类型可以显示为struct nodenode。在C中,struct定义本身仅创建名称struct node。在node完成之前,名称typedef不可见 - 它不在您定义node *next;的位置。

如果使用.c后缀重命名源文件并将其编译为C,编译器将抱怨node是未知类型名称。