首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C:运算符'->‘有问题,编译但返回错误。有main.c和.h、.c文件

问题分析: 根据提供的信息,问题是关于C语言中的运算符'->'出现错误并返回错误的问题。问题的背景是存在main.c、.h、.c文件。

解决方案:

  1. 首先,我们需要确定问题所在的具体位置。根据提供的信息,可以尝试以下步骤来排查错误:
    • 检查是否正确包含了相关的头文件(.h文件),以确保所需的结构体或指针类型已正确声明。
    • 检查是否正确定义了相关的结构体或指针类型,并确保其成员变量或指针成员已正确初始化。
    • 检查是否正确使用了'->'运算符,确保其前面的变量是一个指针类型,并且其后面的成员变量或指针成员存在。
  • 如果问题仍然存在,可以尝试以下步骤进一步排查:
    • 检查是否在使用'->'运算符之前对相关指针进行了空指针检查,避免出现空指针引用导致错误。
    • 检查是否在使用'->'运算符时正确引用了相关的结构体成员或指针成员的名称,避免拼写错误或引用不存在的成员变量。
    • 检查是否在使用'->'运算符时正确处理了指针类型的指向,避免出现类型不匹配导致的错误。
  • 如果以上步骤都没有解决问题,可以考虑以下可能性:
    • 检查是否存在其他相关的代码或文件,可能存在与问题相关的其他代码或文件,需要一同进行检查和排查。
    • 检查编译器或IDE的设置,确保其使用了正确的编译选项和编译器版本。

总结: 在解决C语言中运算符'->'出现错误并返回错误的问题时,需要仔细检查代码中的语法错误、结构体或指针类型的定义和初始化、运算符的使用等。如果问题仍然存在,可以考虑进一步检查其他可能导致问题的因素,并确保编译环境的设置正确。

在腾讯云产品中,提供了一系列与云计算相关的产品,如云服务器、云存储、人工智能等,但由于要求不提及具体品牌商,无法给出腾讯云的相关产品推荐链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

程序员C语言快速上手——进阶篇(七)

1 gcc t1.c t2.c main.c -o main 这里几点需要注意 头文件.c文件放到一个文件夹下 我们自己本地的头文件,在包含时应当写英文双引号,而不是尖括号 了头文件以后,我们的声明都可以放到头文件中...关于头文件的总结 以上例子是演示完了,细心的朋友会发现,这里还遗留了一些问题。 头文件到底是什么? 头文件一定要和源代码放在一起吗? 在包含头文件时,""到底什么区别?...例如,我们将calculate.h文件改为calculate.txt,包含时使用#include "calculate.txt",再次使用gcc t1.c t2.c main.c -o main编译,完全没有任何问题...第二个问题,头文件是可以放置到本机的任意文件夹下的。一定要学会如何处理头文件路径问题。...defined运算符 1#define DEBUG 2 3#if defined DEBUG 4... 5#endif 检测其后的标识符是否定义过,若定义过则返回1,否则返回0 #ifdef#ifndef

1.3K60

预处理指令、typedef、条件编译、多文件代码

例如,两组变量。变量由前缀变量名组成。...对于源文件来说,编译器是单个独立编译的,并生成对应的目标文件。 例如: main.c 经过编译后,生成目标文件 main.obj 。...问题的关键在于编译器是单个独立编译的,编译main.c时,编译器不知道标识符print具体是什么 函数声明替换include 除了函数定义可以让编译器正确识别print标识符,此外,函数声明也可以。...因此,出现链接错误。 现在恢复代码 目前,文件 print.c 里面只定义了一个函数。若 print.c 里面定义的函数较多,在其他文件里面需要使 用这些函数时,那么还需要重复声明这些函数。...因此,将删除从#ifndef PERSON_H开始,直到#endif的代码。 嵌套重复包含 文件main.c包含了头文件person.hstudents.h

1.1K40
  • 预处理指令、typedef、条件编译、多文件代码

    例如,两组变量。变量由前缀变量名组成。...对于源文件来说,编译器是单个独立编译的,并生成对应的目标文件。 例如: main.c 经过编译后,生成目标文件 main.obj 。 print.c 经过编译后,生成目标文件 print.obj 。...问题的关键在于编译器是单个独立编译的,编译main.c时,编译器不知道标识符print具体是什么 函数声明替换include 除了函数定义可以让编译器正确识别print标识符,此外,函数声明也可以。...因此,出现链接错误。 现在恢复代码 目前,文件 print.c 里面只定义了一个函数。若 print.c 里面定义的函数较多,在其他文件里面需要使 用这些函数时,那么还需要重复声明这些函数。...因此,将删除从#ifndef PERSON_H开始,直到#endif的代码。 嵌套重复包含 文件main.c包含了头文件person.hstudents.h

    1.2K00

    代码中%80的非逻辑性代码都可以被它发现

    前言 很多代码问题编译阶段难以发现,只有在运行时才会暴露。即便是在运行时出现问题了,我们可能仍然需要费一番功夫才能最终找到代码的问题。幸运地是,我们可以利用一个工具在编译之前就可以发现这些问题。...了它,基本可以检查出代码中80%的非逻辑性错误。这就是本文要介绍的主角--PC-lint。...例如files.lnt文件内容如下: D:\pclint\lint\test\test.c D:\pclint\lint\test\main.c 表明将会对main.ctest.c进行静态检查。...\test\main.c //我们的源代码文件 由于我们的代码包含了stdio.h文件,因此还需要stdio.h文件,我把它放在了D:\pclint\include,并在lnt文件中指定了头文件的位置...第16行,21行提示返回值没有使用。我们调用printf函数之后,并没有必要使用其返回值,因此我们可以忽略这个警告。 第24行提示警告号527,return语句不可到达。

    1.6K40

    记64位地址截断引发的挂死问题

    发现,编译时出现错误,提示函数没有声明 于是加上声明之后编译通过,并没有出现挂死的问题 随即继续跟踪原项目出问题的进程,发现同样这些接口都没有外部声明,再加上另外一个进程的警告信息,提示int往指针强转...简化示例 示例代码分别放在main.ctest.c中,main.c内容如下: //main.c //公众号编程珠玑 #include #include int main...而main函数通过调用testFun,将地址值返回给p,并打印p的地址值。 编译运行: $ gcc -o main main.c test.c $ ....也就是说,如果函数实际返回值,但是函数返回值类型却没有指明,编译器会将其默认为int。...include void *testFun(); main.c包含test.h文件: //main.c //公众号编程珠玑 #include"test.h" int main(void

    87620

    程序的基本概念

    Token的概念相当于自然语言中的单词标点、数学式中的数运算符、化学分子式中的元素名和数字,例如3=+6$的问题之一在于$不是一个合法的数也不是一个事先定义好的运算符,而 2 Zz的问题之一在于没有一种元素的缩写是...结构是指Token的排列方式,3=+6$还有一个结构上的错误,虽然加号等号都是合法的运算符,但是不能在等号之后紧跟加号,而 2 Zz的另一个问题在于分子式中必须把下标写在化学元素名称之后而不是前面。...逻辑错误语义错误 第三类错误是逻辑错误语义错误。如果程序里逻辑错误编译运行都会很顺利,看上去也不产生任何错误信息,但是程序没有干它该干的事情,而是干了别的事情。...正如前面所说,编译器对于语法错误是毫不留情的,如果你的程序一点拼写错误,例如第一行写成了 stdoi.h ,在编译时会得到错误提示: $ gcc main.cmain.c:1:19: fatal...对于初学者来说,最想看到的错误提示其实是这样的:“在main.c程序第1行的第19列,您试图包含一个叫做stdoi.h文件,可惜我没有找到这个文件,但我却找到了一个叫stdio.h文件,我猜这个才是您想要的

    1.1K20

    静态链接库动态链接库的区别

    2、静态链接库下面就通过实际的例子来向大家演示一下,该怎样编译使用静态动态链接库:2.1、编辑测试文件二个文件:add.c、 sub.c、add.h 、sub.h main.c/*add.h *...在程序main.c中,我们包含了静态库的头文件add.hsub.h,然后在主程序main中直接调用公用函数add()sub()即可。2.5、生成目标程序main,然后运行....取值两个:1) RTLD_LAZY : 表明在动态链接库的函数代码执行时解决。2) RTLD_NOW : 表明在dlopen返回前就解决所有未定义的符号,一旦未解决,dlopen将返回错误。...抱着对问题必究到底的心情,来试试看。先删除除.c.h外的所有文件,恢复成我们刚刚编辑完举例程序状态。...(动态库文件和静态库文件同名):libmymath.a 、 libmymath.so编译运行程序:gcc -o main main.c -L.

    8.3K21

    6_Makefile与GCC

    错误警告信息分析:在展开第二行的hander.h文件的时候,产生编译错误,没有hander.h文件或者目录。...] int b = a; ^ ​ 错误警告信息分析:一个错误两个警告。...那么我继续解决错误信息警告,将两个警告的变量删除printf前添加分号,然后继续编译,如下: $ gcc -Wall main.c -o output main.c: In function ‘main...^ ​ 错误警告信息分析:还是警告信息,该警告指的是printf中的格式参数太多,也就是没有添加变量a的输出格式,继续解决错误信息警告,添加变量a的输出格式,然后继续编译,如下:...下面我们创建三个文件main.c,add.c,add.h,讲解静态库链接动态库链接,如下: ​ main.c: #include #include "add.h" int main

    3.6K10

    Linux — Makefile的学习笔记以及多级目录下Makefile的编写

    Make命令makefile文件的结合提供了一个在项目管理领域十分强大的工具,不仅可以用于控制源代码的编译,而且还可以用于手册也的编写以及将应用程序安装到目标目录。...o main main.o:main.c gcc -c main.c clean: rm -rf main.o main 在终端运行make –f makefile1的时候,可以看到通过两个步骤将源文件编译生成可执行文件...main.c,add.c,add.h,sub.c,aub.h): main.c的内容为: #include #include "add.h" #include "sub.h" int...-o $@ 请注意:在下面将会移动add.hsub.h的路径,所在在修改文件目录的同时需要将main.c中的两个头文件更新过来,具体如果采用本文中一致的目录结构的话,可以这样修改: 将原本main.c.../sub/sub.h" 将add.cadd.h移动到add文件夹中, $(OBJDIR)/add.o:add.c $(CC) -c $^ -o $@ 将sub.csub.h移动到sub文件夹中

    5.5K10

    栈(stack)的应用

    平衡符号 编译器在检查(){}这样成对出现的符号所造成的语法错误时,通常并不需要去设计一个很复杂的程序去判断。而是使用一个简单的算法,这个算法用到一个栈。...按照以上步骤将表达式处理完后,此时若堆栈不为空,则将栈中所有运算符弹出到输出流。 需要注意的是,左括号的优先级的问题,它在栈外时,优先级最高,在栈内时优先级最低。因此必须处理好左括号的优先级。...栈的头文件 #ifndef STACK #define STACK #include #include typedef struct StackNode stack...temp->c; free(temp); return c; } } main.c文件 #include"stack.h" #define MAX 100 void transform(char...main.c文件 #include"stack.h" ElementType Calc(Pstack s, char *str); int main() { char str[MAX]; printf

    1.3K20

    C语言从入门到实战——预处理详解

    当需要获取当前文件的路径和文件名时,可以使用这个常量。 在进行编译的源文件中,使用 FILE 会返回当前源文件的路径和文件名。...这个宏在调试错误排查中非常有用,可以帮助开发人员快速定位代码中的问题。...原因二: 用于调用函数从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模速度方面更胜一筹。 更为重要的是函数的参数必须声明为特定的类型。...如果test.h文件比较大,这样预处理后代码量会剧增。如果工程比较大,公共使用的头文件,被大家都能使用,又不做任何的处理,那么后果真的不堪设想。 如何解决头文件被重复引入的问题?答案:条件编译。...编译器在遇到 #error 指令时会显示以下错误消息并停止编译main.c: In function 'main': main.c:5:2: error: #error "This code requires

    51111

    CC++之makefile写法

    在这个例子中,我们一个主程序代码(main.c)、三份函数代码(getop.c、stack.c、getch.c)以及一个头文件(calc.h)。...接下来,让我们来解决一下效率方面的问题,先初步修改一下上面的代码: cc = gcc prom = calc source = main.c getch.c getop.c stack.c $(prom...而且如果我们修改的是calc.h文件,make就无法察觉到变化了(所以必要为头文件专门设置一个常量,并将其加入到依赖关系表中)。下面,我们来想一想如何解决这个问题。...) $(cc) -c stack.c 这样一来,上面的问题显然是解决了,同时我们又让代码变得非常啰嗦,啰嗦往往伴随着低效率,是不祥之兆。...了这两个设定,无论我们今后在该工程加入多少.c.h文件,Makefile都能自动将其纳入到工程中来。

    92720

    C语言】解决C语言报错:Undefined Reference

    gcc file1.c file2.c -o program -lmylib 检查函数声明定义:确保函数的声明定义一致,参数类型返回类型相匹配。...gcc main.c -o main -lmylib 使用头文件进行跨文件引用:在多个源文件中引用同一符号时,使用头文件声明全局变量或函数。...此例中,mylib_function函数在mylib库中定义,编译时未链接该库,导致未定义引用错误。...正确的做法是链接必要的库文件: gcc main.c -o main -lmylib 示例4:跨文件引用未包含头文件 // file1.c int global_variable; // file2....总结 Undefined Reference是C语言编译过程中常见且令人头疼的问题,通过正确的编程习惯使用适当的调试工具,可以有效减少和解决此类错误

    56820

    我与C语言二周目邂逅vlog——8.编译链接

    在本篇文章中,我们将深入讲解 C 语言的编译链接过程,详细介绍其各个阶段的工作原理、步骤以及潜在的问题。...编译链接的常见问题 7.1 编译错误 编译错误通常是由语法错误、类型不匹配或其他编译器在解析转换源代码时检测到的问题引起的。例如: 语法错误:如缺少分号、花括号不匹配等。...使用 gcc 进行编译链接的典型命令如下: gcc -o output main.c file1.c file2.c 其中: -o output 指定输出的可执行文件名。...main.c、file1.c、file2.c 是源文件。 8.2 Makefile 在大型项目中,使用 Makefile 可以简化编译链接的过程。...理解编译链接过程,可以帮助程序员更好地诊断和解决编译器报错、链接错误问题。此外,掌握这些过程还可以帮助优化程序的运行效率,合理利用静态库动态库,从而编写出高效、可靠的代码。

    10810

    www6663388com请拨18687679362环球国际iOS 微信编译速度优化分享

    Xcode 9 个很偶然的 bug,在源码没有任何修改的情况下经常触发全新编译,用 CCache 很好的解决这一问题。但随着 Xcode 10 修复全量编译问题,这一方案逐步弃用了。...二、优化 kinda kinda 是今年引入支付跨平台框架(C++),编译速度奇慢,一个源文件编译都要 30s。...经过分析 LinkMap 文件使用 Xcode Preprocess 某些源文件,发现有以下问题: proto 文件生成的代码较多 某个基类/宏使用了大量模版 对于问题一,可以设置 proto 文件选项为...int val; }; // main.c #include "HeaderA.h" #include "HeaderB.h" int testAndReturn(struct StructA *a...main.c HeaderA.h has correct #includes/fwd-decls) HeaderB.h has correct #includes/fwd-decls) main.c

    2.4K20

    弱符号__attribute__((weak))

    链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,当普通的全局符号不可用时,链接器会使用弱符号。当函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。...原理:连接器发现同时存在弱符号强符号,有限选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。如果都不存在:静态链接,恭喜,编译时报错,动态链接:对不起,系统无法启动。...强符号弱符号的例子 举个例子: strong.c //生成 libstrong.so #include void real_func() { printf("int real...main.c #include extern void real_func(); void main() { real_func(); } 如果 gcc main.c...如果将strong.c weak.c编译成.a或者.o gcc main.c strong.o weak.o 或者 gcc main.c strong.o weak.o 那么输出结果都是"real

    6.4K30

    iOS 微信编译速度优化分享

    Xcode 9 个很偶然的 bug,在源码没有任何修改的情况下经常触发全新编译,用 CCache 很好的解决这一问题。但随着 Xcode 10 修复全量编译问题,这一方案逐步弃用了。...二、优化 kinda kinda 是今年引入支付跨平台框架(C++),编译速度奇慢,一个源文件编译都要 30s。...经过分析 LinkMap 文件使用 Xcode Preprocess 某些源文件,发现有以下问题: proto 文件生成的代码较多 某个基类/宏使用了大量模版 对于问题一,可以设置 proto 文件选项为...int val; }; // main.c #include "HeaderA.h" #include "HeaderB.h" int testAndReturn(struct StructA *a...main.c HeaderA.h has correct #includes/fwd-decls) HeaderB.h has correct #includes/fwd-decls) main.c

    10K128

    gcc编译器参数_gcc for c4droid

    执行过程 虽然我们称Gcc是C语言的编译器,使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing...第1步:编辑得到举例的程序–hello.h、hello.cmain.c; hello.h(见程序1)为该函数库的头文件。...我们回过头看看,发现使用静态库使用动态库编译成目标程序使用的gcc命令完全一样,那当静态库动态库同名时,gcc命令会使用哪个库文件呢?抱着对问题必究到底的心情,来试试看。...先删除 除.c.h外的 所有文件,恢复成我们刚刚编辑完举例程序状态。...# rm -f hello hello.o /usr/lib/libmyhello.so # ls hello.c hello.h main.c # 在来创建静态库文件libmyhello.a动态库文件

    96130

    【一站式解惑】Linux中.a、.so.o文件以及-I,-L,LIBRARY_PATH,LD_LIBRARY_PATH等

    如果只有lib文件,那么这个lib文件是静态编译出来的,索引实现都在其中。静态编译的lib文件好处:给用户安装时就不需要再挂动态库了。...从上面的说明可以看出,DLL.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。...我们回过头看看,发现使用静态库使用动态库编译成目标程序使用的gcc命令完全一样,那当静态库动态库同名时,gcc命令会使用哪个库文件呢?抱着对问题必究到底的心情,来试试看。...先删除除.c.h外的所有文件,恢复成我们刚刚编辑完举例程序状态。...调用动态库的时候几个问题会经常碰到,有时,明明已经将库的头文件所在目录 通过 “-I” include进来了,库所在文件通过 “-L”参数引导,并指定了“-l”的库名,通过ldd命令察看时,就是死活找不到你指定链接的

    5K52
    领券