a327904410 发表于 2021-10-12 14:10:28

VS2019使用问题

去年初学C语言按着课本敲了一些代码,有头文件和源文件,其中源文件是CPP类型的,今天才发现,然后改回C类型头文件一直报错,求助怎么调。
VS用的是C++桌面开发(貌似没找到C语言的)

头文件.h
#pragma once
#define MaxSize 100                  //顺序栈的初始分配空间大小

typedef char ElemType;
typedef struct {
        ElemType data;                //保存栈中元素,这里假设ElemType为char类型
        int top;                               //栈顶指针
}SqStack;

//初始化栈运算算法
void InitStack(SqStack& st) {                   //st为引用型参数
        st.top = -1;
}

//销毁栈运算算法
void DestroyStack(SqStack st) {

}

//进栈运算算法
int Push(SqStack& st, ElemType x) {
        if (st.top == MaxSize - 1)                      //栈满上溢出返回0
                return 0;
        else {
                st.top++;
                st.data = x;
                return 1;                           //成功进栈返回1
        }
}

//出栈运算算法
int Pop(SqStack& st, ElemType& x) {               //x为引用型参数
        if (st.top == -1)                           //栈空返回0
                return 0;
        else {
                x = st.data;
                st.top--;
                return 1;                         //成功栈返回1
        }
}

//取栈顶元素运算算法
int GetTop(SqStack st, ElemType& x) {         //x为引用型参数
        if (st.top == -1)                      //栈空返回0
                return 0;
        else {
                x = st.data;
                return 1;                  //成功取栈顶元素返回1
        }
}

//判断空栈运算算法
int StackEmpty(SqStack st) {
        if (st.top == -1)
                return 1;                           //栈空返回1
        else
                return 0;                        //栈不空返回0
}

源文件.c
#include<stdio.h>
#include"test06.h"

void main() {
        SqStack st;                   //定义一个顺序栈st
        ElemType e;
        printf("初始化栈st\n");
        InitStack(st);
        printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
        printf("a进栈\n"); Push(st, 'a');
        printf("b进栈\n"); Push(st, 'b');
        printf("c进栈\n"); Push(st, 'c');
        printf("d进栈\n"); Push(st, 'd');
        printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
        GetTop(st, e);
        printf("栈顶元素:%c\n", e);
        printf("出栈次序:");
        while (!StackEmpty(st)) {                   //栈不空循环
                Pop(st, e);                         //出栈元素e并输出
                printf("%c", e);
        }
        printf("\n");
        DestroyStack(st);
}

图片发不了。。。头文件类型显示是C++头文件{:10_243:}

a327904410 发表于 2021-10-12 14:11:07

上面的代码是栈的顺序存储,CPP格式运行是对的,只是想问下VS问题

hrpzcf 发表于 2021-10-12 14:12:42

可以用C++项目,但文件名改.c

a327904410 发表于 2021-10-12 14:31:46

hrpzcf 发表于 2021-10-12 14:12
可以用C++项目,但文件名改.c

我是这么做的,但头文件还是出现错误。头文件类型是C++的,错误和这个有关系?

a327904410 发表于 2021-10-12 14:33:14

a327904410 发表于 2021-10-12 14:31
我是这么做的,但头文件还是出现错误。头文件类型是C++的,错误和这个有关系?

严重性        代码        说明        项目        文件        行        禁止显示状态
错误(活动)        E0141        存在正文时不允许未命名的原型参数        01        D:\Mycode\Books\01\test06.h        11       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误(活动)        E0018        应输入“)”        01        D:\Mycode\Books\01\test06.h        11       
错误(活动)        E0020        未定义标识符 "st"        01        D:\Mycode\Books\01\test06.h        12       
错误(活动)        E0141        存在正文时不允许未命名的原型参数        01        D:\Mycode\Books\01\test06.h        21       
错误(活动)        E0018        应输入“)”        01        D:\Mycode\Books\01\test06.h        21       

人造人 发表于 2021-10-12 14:38:06

a327904410 发表于 2021-10-12 14:33
严重性        代码        说明        项目        文件        行        禁止显示状态
错误(活动)        E0141        存在正文时不允许未命名的原型参数        01        D ...

C语言中没有引用

人造人 发表于 2021-10-12 14:38:39

void InitStack(SqStack& st) {                   //st为引用型参数

a327904410 发表于 2021-10-13 00:00:14

人造人 发表于 2021-10-12 14:38
C语言中没有引用

今晚查了下才知道,解决办法是把后缀改为CPP,但CPP不是C++了吗,虽然可以写C语言但感觉CPP和C到底怎么选。。。

人造人 发表于 2021-10-13 00:09:14

a327904410 发表于 2021-10-13 00:00
今晚查了下才知道,解决办法是把后缀改为CPP,但CPP不是C++了吗,虽然可以写C语言但感觉CPP和C到底怎么选 ...

在 C语言中没有引用,可以使用指针

a327904410 发表于 2021-10-14 14:45:58

人造人 发表于 2021-10-13 00:09
在 C语言中没有引用,可以使用指针

{:10_323:}
页: [1]
查看完整版本: VS2019使用问题