C语言中,如何在多个文件中共享自定义类型。

如题,我在一个头文件里用类型定义自定义了一个类型:

/*  Struct.h  */
#ifndef STRUCT_H
#define STRUCT_H

#define ElementType int

typedef struct SNode *PtrToSNode;
struct SNode {
    ElementType COEF;
    ElementType EXPO;
    PtrToSNode Next;
};
typedef Ptr PolyN;

#endif

这里PolyN也是一个类型名

在main.c中包含了Struct.h

然而我想在main.c中声明类型为PolyN的变量p1

PolyN p1;

编译时出错:

[Error] unknown type name 'PolyN'

如何解决?

1个回答

Zhou_076
Std_JM 回复: 没打完。。我想问的是 我在一个头文件中定义了一个指向该结构的指针 typedef struct SNode *PtrToSNode,那么这个PtrSNode怎么在所有源文件中作为一个类型名(一个指向结构的指针)来声明变量
7 个月之前 回复
Zhou_076
Std_JM 多谢回答,但是这篇文章讲的是利用extern来声明外部变量。我想问
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言中的栈空间共享
栈的共享空间,用栈实现偶数奇数的输出。
自定义类型和C语言中的动态内存管理
自定义类型:结构体、枚举、联合一、结构体:1、结构体的声明struct tag { member-list; }variable-list; struct:结构体关键字(不能缺省)tag:结构体标签,可以省略(匿名结构体类型)member-list:成员列表variable-list:变量列表struct Stu { char name[20]; int age; cha...
C语言中自定义类型部分知识总结
什么是自定义类型? 所谓自定义类型,就是除去基本类型,用户可以自己定义的一些类型,一般自定义类型包含三种:结构体、枚举、联合。 结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 如: struct Student//类型声明 { char name[1024];//名字 int age;//年龄 char sex[1024];//性别 char id[1024]...
C语言中的文件
C版本中使用的有两种对文件处理的方法: 缓冲文件系统:指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存想磁盘输入数据,必须先送到内存中,缓冲区装满后才一起送到磁盘。以下介绍均为缓冲区文件系统。 非缓冲区文件系统:系统不自动开辟确定大小的缓冲区,由程序为每个文件设定缓冲区。 UNIX系统下,用缓冲区文件系统处理文本文件,用非缓冲区文件系统处理二进制文件。
c语言中的文件
用计算机程序解决实际问题时,在待处理豁得出结果的数据量较大情况下,一般采用读写外部存储介质(如光盘,磁盘,u盘)中的数据。数据一般是以文件组织的形式存储。因此,读写数据就是读写外存中的文件数据。 文件的定义: 相关数据的集合。计算机中的程序数据,文档通常都组织成文件存放在外存储器中,由于输入输出设备具有字节流特征,所以操作系统也罢他们看作文件。 缓冲文件系统; 系统在主存中开辟的,用来临时
如何在C语言中使用正则表达式
查阅了百度,借鉴了许多大牛的代码,自己的整理如下: #include #include #include #include using namespace std; int main() { //例1:从中提取tom const char* url = ""; char uri[10] = {0}; sscanf(url, "%*[^:]:%[^@]", uri
如何在C语言中调用汇编函数
我用的事TI的CCS5编译环境,我在.c文件中需要调用asm文件中的一个函数funA。编译过程是把.c和.asm都编译成obj文件,但是在链接时会出现找不到funA的错误。请高手指点一二,多谢!
如何在c语言中使用汇编语言
最好详细点,32位的汇编和8086/8088汇编使用时有什么区别?
如何在c语言中获得系统时间?
我用c语言编的程序,但老师让我计算程序运行的时间,可是我不太清楚是否有库函数rn可以获得系统时间,也不知道如果有的话,它包含在哪个函数库中。快帮帮我呀!!
如何在c语言中调用shell命令?
如题:rn比如调用killall指令。
如何在C语言中调用汇编语言
我接触C语言编程不长时间,遇到一些技术问题请各位前辈帮助解决。rnrn如何在C语言中调用汇编语言?开发环境是什么?rnC语言中的“asm”或“_asm"函数是什么意思?我该如何使用?rnrn例如:下列汇编代码如何嵌入到C语言中rnDSEG SEGMENTrnDATA1 DB 13h,26hrnDATA2 DW 0rnDSEG ENDSrnSSEG SEGMENT STACKrnSKTOP DB 20 DUP(0)rnSSEG ENDSrnCSEG SEGMENTrn ASSUME CS:CSEG,DS:DSEGrn ASSUME SS:SSEGrnSTART: MOV AX,DSEGrn MOV DS,AXrn MOV AX,SSEGrn MOV SS,AXrn MOV SP,LENGTH SKTOPrn MOV AL,DATA1rn ADD AL,DATA1+1rn MOV BYTE PTR DATA2,ALrn MOV AH,4Chrn INT 21hrnCSEG ENDSrn END START
如何在C语言中动态调用函数?
例如,我写了一个这样的函数:rn[code=c]rnint my_sum(int n, ...)rn int res = 0;rn va_list va;rn va_start(va, n);rn dorn res += va_arg(va, int);rn while (--n);rn va_end(va);rn return res;rnrn[/code]rnrn在主函数中:rn[code=c]rnint main(int argc, char ** argv)rn int *array;rn int n;rn //输入n;rn array = (int *) malloc(sizeof(int) * n);rn //输入arrayrn //现在我想要将n和array作为my_sum的参数,该怎么做?rn //由于在实际运用中,my_sum函数不是我写的,所以不能通过修改my_sum函数达到目的。rn //而且由于n不能确定,也不能用if和case语句达成目的。rn //答案必须是满足C99标准,不能依赖于某一特定的编译器。rn return 0;rnrn[/code]
如何在c语言中对接口的访问?
如通过pci插槽上的板子控制一台外设
如何在C语言中巧用正则表达式
看到大家讨论这方面的东西,作点贡献聊表各位高手对这个版快的无私奉献 rnrn如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序员,用户同样可以在自己的程序中运用正则表达式。 rnrn标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。 rnrn编译正则表达式 rnrn为了提高效率,在将一个字符串与正则表达式进行比较之前,首先要用regcomp()函数对它进行编译,将其转化为regex_t结构: rnrnint regcomp(regex_t *preg, const char *regex, int cflags);rnrnrnrn参数regex是一个字符串,它代表将要被编译的正则表达式;参数preg指向一个声明为regex_t的数据结构,用来保存编译结果;参数cflags决定了正则表达式该如何被处理的细节。 rnrn如果函数regcomp()执行成功,并且编译结果被正确填充到preg中后,函数将返回0,任何其它的返回结果都代表有某种错误产生。 rnrn匹配正则表达式 rnrn一旦用regcomp()函数成功地编译了正则表达式,接下来就可以调用regexec()函数完成模式匹配: rnrnint regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);rntypedef struct rn regoff_t rm_so;rn regoff_t rm_eo;rn regmatch_t;rnrnrnrn参数preg指向编译后的正则表达式,参数string是将要进行匹配的字符串,而参数nmatch和pmatch则用于把匹配结果返回给调用程序,最后一个参数eflags决定了匹配的细节。 rnrn在调用函数regexec()进行模式匹配的过程中,可能在字符串string中会有多处与给定的正则表达式相匹配,参数pmatch就是用来保存这些匹配位置的,而参数nmatch则告诉函数regexec()最多可以把多少个匹配结果填充到pmatch数组中。当regexec()函数成功返回时,从string+pmatch[0].rm_so到string+pmatch[0].rm_eo是第一个匹配的字符串,而从string+pmatch[1].rm_so到string+pmatch[1].rm_eo,则是第二个匹配的字符串,依此类推。 rnrn释放正则表达式 rnrn无论什么时候,当不再需要已经编译过的正则表达式时,都应该调用函数regfree()将其释放,以免产生内存泄漏。 rnrnvoid regfree(regex_t *preg);rnrnrnrn函数regfree()不会返回任何结果,它仅接收一个指向regex_t数据类型的指针,这是之前调用regcomp()函数所得到的编译结果。 rnrn如果在程序中针对同一个regex_t结构调用了多次regcomp()函数,POSIX标准并没有规定是否每次都必须调用regfree()函数进行释放,但建议每次调用regcomp()函数对正则表达式进行编译后都调用一次regfree()函数,以尽早释放占用的存储空间。 rnrn报告错误信息 rnrn如果调用函数regcomp()或regexec()得到的是一个非0的返回值,则表明在对正则表达式的处理过程中出现了某种错误,此时可以通过调用函数regerror()得到详细的错误信息。 rnrnsize_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);rnrnrnrn参数errcode是来自函数regcomp()或regexec()的错误代码,而参数preg则是由函数regcomp()得到的编译结果,其目的是把格式化消息所必须的上下文提供给regerror()函数。在执行函数regerror()时,将按照参数errbuf_size指明的最大字节数,在errbuf缓冲区中填入格式化后的错误信息,同时返回错误信息的长度。 rnrn应用正则表达式 rnrn最后给出一个具体的实例,介绍如何在C语言程序中处理正则表达式。 rnrn#include ;rn#include ;rn#include ;rnrn/* 取子串的函数 */rnstatic char* substr(const char*str, unsigned start, unsigned end)rnrn unsigned n = end - start;rn static char stbuf[256];rn strncpy(stbuf, str + start, n);rn stbuf[n] = 0;rn return stbuf;rnrn/* 主程序 */rnint main(int argc, char** argv)rnrn char * pattern;rn int x, z, lno = 0, cflags = 0;rn char ebuf[128], lbuf[256];rn regex_t reg;rn regmatch_t pm[10];rn const size_t nmatch = 10;rn /* 编译正则表达式*/rn pattern = argv[1];rn z = regcomp(®, pattern, cflags);rn if (z != 0)rn regerror(z, ®, ebuf, sizeof(ebuf));rn fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);rn return 1;rn rn /* 逐行处理输入的数据 */rn while(fgets(lbuf, sizeof(lbuf), stdin)) rn ++lno;rn if ((z = strlen(lbuf)) >; 0 && lbuf[z-1] == '\n')rn lbuf[z - 1] = 0;rn /* 对每一行应用正则表达式进行匹配 */rn z = regexec(®, lbuf, nmatch, pm, 0);rn if (z == REG_NOMATCH) continue;rn else if (z != 0) rn regerror(z, ®, ebuf, sizeof(ebuf));rn fprintf(stderr, "%s: regcom('%s')\n", ebuf, lbuf);rn return 2;rn rn /* 输出处理结果 */rn for (x = 0; x < nmatch && pm[x].rm_so != -1; ++ x) rn if (!x) printf("%04d: %s\n", lno, lbuf);rn printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));rn rn rn /* 释放正则表达式 */rn regfree(®);rn return 0;rnrnrnrnrn上述程序负责从命令行获取正则表达式,然后将其运用于从标准输入得到的每行数据,并打印出匹配结果。执行下面的命令可以编译并执行该程序: rnrn# gcc regexp.c -o regexprn# ./regexp 'regex[a-z]*' < regexp.crn0003: #include ;rn $0='regex'rn0027: regex_t reg;rn $0='regex'rn0054: z = regexec(®, lbuf, nmatch, pm, 0);rn $0='regexec'rnrnrnrn小结 rnrn对那些需要进行复杂数据处理的程序来说,正则表达式无疑是一个非常有用的工具。本文重点在于阐述如何在C语言中利用正则表达式来简化字符串处理,以便在数据处理方面能够获得与Perl语言类似的灵活性。 rnrnhttp://bbs.chinaunix.net/viewthread.php?tid=303346&extra=page%3D1%26filter%3Ddigest
如何在C语言中实现可变参数
在大学学C语言的时候,第一节课的打印Hello World是我就觉得好奇,printf怎么可以传不同个数的参数,在函数里面是怎么获取的呢? 后来做java发现这叫可变参数,当然、那时候已经不做C了,所以也没考虑C是怎么实现的。 后来做OC以后又经常和C接触,发现C里面有个stdarg.h库,里面有va_list 、va_start(ap, param)、va_end(ap) 、va_arg(ap,
如何在COBOL语言中调用C
最近使用COBOL语言开发时候需要调用C语言写成的一些共用函数有谁了解这方面的知识?rnC语言写成的函数要以那种形式才能让可以调用呢?
如何在C语言中嵌入sql
我用的编译器是VC,数据库是sql server2000rn
如何在C语言中嵌入汇编代码?
如何在C语言中嵌入汇编代码?
如何在C语言中画图?
RT;rnrn如何在C语言中画图?不懂!一直做的都是黑框框,今天老师要我自己做图形!~rnrn 今天老师跟我说,让我开始做图形,可是我只会黑框框,是建立MFC文件?rnrnrnrn
如何在C语言中内嵌汇编语言
比如在C语言中内嵌一个赋值语言rn[code=C/C++]rn#include "stdio.h"rnvoid main(void)rnrn int a=0;rn printf("%d\n",a);rn _asmrn rn mov a,#01hrn rn printf("%d\n",a);rnrn[/code]rn上面的代码想实现如下功能:rn[code=C/C++]rn#include "stdio.h"rnvoid main(void)rnrn int a=0;rn printf("%d\n",a);rn a=1;//一个赋值语句用内嵌汇编来实现!rn printf("%d\n",a);rnrn[/code]rnrn还请高手告诉一下!谢谢
如何在C语言中插入汇编语言?
请问如何在C语言中插入汇编语言?最好能给出了例子。要完整的,包含什么头文件等等。rnrn谢谢各位了!~rn
如何在C语言中调用exe文件
本人想在C中调用一些exe程序但不知道如何去做,这些程序是自己的或是现成的,不是系统程序,如果行得通的话给分
C语言中$$如和理解
Prepare_Copy((uint32_t *)&Load$$RW_IRAM1$$Base,(uint32_t *)&Image$$RW_IRAM1$$RW$$Base,(uint32_t)&Image$$RW_IRAM1$$RW$$Length);rn Prepare_Zero((uint32_t *)&Image$$RW_IRAM1$$ZI$$Base,(uint32_t)&Image$$RW_IRAM1$$ZI$$Length);rn谁帮我看看中间的$$什么意思,怎么理解,谢谢
C语言之自定义类型
结构体 C语言允许用户自己建立由不同类型数据或相同类型的数据组成的组合型的数据结构,称为结构体。 - 结构体创建 Struct 结构体类型名 { 成员1的数据类型名成员1名称; 成员2的数据类型名成员2名称; . . 成员n的数据类型名成员n名称; }结构体变量表={成员初始化}; 例如: Struct student { Long num; Char name; ...
c语言中的.c文件和.h文件
大神的详细解读:传送门   记录下一点点自己对两个文件的理解   函数声明可以有多分,但函数定义只能有一份。所以一般不在头文件里面定义函数,因为同一个程序的多个代码文件可能都会包含这个头文件。 但c++中的inline函数是个例外,得定义在头文件中。为了能够扩展inline函数的内容,在每个调用点上,编译器都能取得其定义。这意味我们必须将inline函数的定义放在头文件中。 c++中在...
c语言之自定义类型
union enum struct 结构体内存对齐
C语言中,文件的操作
C/C++笔记,关于文件的操作
C语言中文件的打开方式
r:打开一个文本文件只读 w:打开一个文本文件只写 a:对一个文本文件添加 rb:打开一个二进制文件只读 wb:打开一个二进制文件只写 ab:对一个二进制文件添加 r+:打开一个文本文件读/写 w+:生成一个文本文件读/写 a+:打开一个文本文件读/写 rb+:打开二进制文件读/写 wb+:生成二进制文件读/写 ab+:打开二进制文件读/写 如果用写方式打开一个文件,则...
C语言中新建文件
#include "stdio.h"rnmain()rnrnFILE *fp;rnchar *filename;rnprintf("Please enter the file road:\n");rnscanf("%s",filename);rnputs(filename);rnif(fp=fopen(filename,"w+"))rnprintf("OK");rnelsernprintf("error");rngetch();rnrn我的这个程序只能在根目录下建立文件,为什么?rn怎么建立一个文件夹呢?
_数据存储—C语言中的文件
.................................................................................................................................................................................................
c语言中文件的输入输出
详细描述了c语言中文件的操作。里面介绍了从文件读和写的基本操作,分类很详细!
C语言中文件的操作
大家好,我在C语言中打开一个文件,并想将其转换成BYTE进行处理,代码如下rntypedef unsigned char BYTE;rnFILE *f;rnBYTE *fInBytes;rnrnf = fopen("upper.tif", "r");rnfInBytes = (BYTE *)f;rnrnprintf("The 1st value of the file is: %d and %d", *f, *fInBytes);rn为什么输出的结果两个都是0?rn我很肯定文件的第一个数值不为0,因为如下语句的输出rnrn printf("the value: %d", fgetc(f));rnrn为73。rnrn这是何解? 坐等高人,小生先行谢过
C语言中的文件问题
请问如何在VC6.0环境下用C语言实现向一个文件夹下存储一幅处理过的图片的问题.rn
C语言中的dat文件???
刚学C语言的文件部分,有个问题不太明白:rn无论是dat还是txt文件,用记事本都能打开文件查看其中的内容!rn如何能使dat的数据文件不能直接被打开呢?
c语言中的文件处理函数
文件指针 缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态 及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明: 例如,VS2008编译环境提供的 stdio.h 头文件中有以下的文件类型申明: struct _iobuf { c...
如何在python中调用C语言中的函数
今天在工作中遇到一个问题;我需要在Python脚本中调用一个Cpp语言函数,这个Cpp语言函数属于外部模块的函数。具体环境:OS: Linux Fedora 26python: python2.7接下来我要开始调查这个问题,调查清楚之后,我将会更新到这里来:[2018-03-01 update]        C语言函数接收的输入是一个结构体,这样的话,就需要Python将数据以Dictionar...
C语言中的文件概述
FILE *fp 所有平台的名字都是FILE,FILE是一个结构体类型,里面的成员实现的功能一致,但是不同平台成员的名字不一样。typedef struct _IO_FILE FILE;声明FILE结构体类型的信息包含在stdio.h头文件中为了统一,便于移植,所有平台都用typedef定义成FILE例如typedef struct{    short level; //缓冲区“满”或者空的程度 ...
c语言中如何在字符串中包含" (双引号)
谢谢
c语言中如何在具体的地址中写入数据
如题rn比如在地址0xffff中写数据AA
在C语言中如何在缓冲区中修改文件
在C语言中如何在缓冲区中修改文件
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池

相似问题

6
c语言控制台输出中文乱码问题
1
c语言中如何使用ocilib把string类型的参数存到数据库CLOB类型的字段中
1
用C#语言在VisualStudio中自定义控件时,如何在设计器窗口下实时看到预览效果(图形效果)?
6
C# 自定义异常的捕捉问题
2
C语言读取excel或txt文件数据
1
VS2017在编写C语言的时候 出现 意外的类型:int。
1
C语言写入数据到二进制文件失败
1
关于sql server 自定义函数返回table类型
1
如何使用C语言获取文件中层的函数头?
1
C语言中如何实现在面积和体积等运算中定义圆周率π?
2
C语言数据文件处理技术问题,从3个单词文件中找出第1个在这3个文件中都出现的单词?
3
关于嵌入式操作系统的一个题目,编写一个c语言程序,其功能是将一个文本文件读出,然后再反序写回。
0
c语言怎么获取pcap文件中的mac地址
3
使用QT5.9自定义控件时,为什么在QtCreator左侧里找不到自定义的控件,而QtDesigner里可以看到?
3
keil无法生成带后缀的hex文件,会生成一个文件,文件类型根据设置的名字决定。
1
c语言用feof判断文件结尾,使用fscanf读取内容,最后一个词为什么被多读了一次。
8
C语言中的变量自动转换问题
1
哪位有带弃权概率的囚徒困境相关c语言的代码吗?
1
c语言中如何根据概率进行选择随机数?
2
jasvascript语言怎么自定义ie浏览器的菜单,比如不允许打印的功能的调用