`
envy2002
  • 浏览: 153861 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

linux extern关键字的作用2

阅读更多
extern int O_RDONLY;

#include <stdio.h>
//包含include <fcntl.h>时,会报错
/*
main.c:5: error: conflicting types for 'open'
/usr/include/fcntl.h:72: error: previous declaration of 'open' was here
*/
#include<fcntl.h>
//#include <sys/stat.h>

int open( const char * pathname, int flags)
{
	printf("string is %s\n",pathname);
	return 0;
}
int main(int argc, char **argv)
{
	
	printf("flag is %d",O_RDONLY);
	//open("my lady gaga",34);
	return 0;	
}

//我们在这里故意写和fcntl.h中定义的函数 int open( const char * pathname, int flags);一致
//看看为什么在不包含fcntl.h时不报错,但是包含这个fcntl.h头文件时报错
//why, because 编译器链接范围的问题!
//c语言编译是个单个文件编译过程。
//以现在main.c为中心,这是个闭包,include的符号(函数,变量,包括include<头文件>,extern声明
//为外部符号,在链接时用到。

//1.当有extern int O_RDONLY时,如果没有include<fcntl.h>,那么会报未定义的错误,
//增加则不会

//2.如果有int open函数,如果没有 include <fcntl.h>是不会报错的,有会报错

这些错误的猜想:应该归于宏定义的问题,而不是链接的问题。应该连接器还是知道去哪里链接的,但是由于宏定义的
问题,使其出错。

分享到:
评论

相关推荐

    gcc主要关键字介绍

    此外,熟悉这些关键字对于理解和编写shell脚本也至关重要,尤其是在Linux环境下进行系统管理或自动化任务时。希望本文能够为初学者提供一个清晰的学习路径,帮助他们更快地掌握gcc的关键字并应用于实际编程中。

    嵌入式linux工程师面试题目及知识点

    11. 如何在两个.c文件中引用对方的变量:extern关键字; 12. 使用malloc之前需要做的准备工作:检查返回值; 13. realloc函数在使用上要注意的问题:避免内存泄露; 14. strtok函数在使用上要注意的问题:避免缓冲区...

    c/c++中如何实现动态库动态加载的完整工程示例代码

    在动态库实现方面,提供一个虚拟元类MetaObject,然后在库的cpp文件中建立子类继承该类,实现其具体功能,并在cpp文件中直接提供函数API,这些API函数不在头文件中声明,需要extern关键字修饰。

    经典嵌入式Linux面试题

    13. 如何引用一个已经定义过的全局变量:可以用引用头文件的方式,也可以用extern关键字。 14. 全局变量可不可以定义在可被多个.C文件包含的头文件中:可以,在不同的C文件中以static形式来声明同名全局变量。 编程...

    linux c语言面试宝典

    * 可以用引用头文件的方式,也可以用 extern 关键字。 15. 全局变量可不可以定义在可被多个.C 文件包含的头文件中: * 可以,在不同的 C 文件中以 static 形式来声明同名全局变量。 16. 语句 for( ;1 ;) 的...

    linux c学习笔记

    EXTERN关键字在C语言中用于声明全局变量,表明该变量在其他源文件中已被定义。这有助于解决多文件项目中变量的可见性和生命周期问题。 七、浅谈动态内存 动态内存管理是C语言中的一大特性,通过malloc()、calloc()...

    extern()和 flock()函数

    ### `extern` 关键字详解 #### 一、`extern` 的基本概念 在 C/C++ 编程语言中,`extern` 是一个非常重要的关键字,主要用于声明一个变量或函数是在其他地方定义的。通常情况下,当我们需要在不同的源文件之间共享...

    Linux知识体系复习

    - **Extern关键字**:用于声明一个在其他源文件中定义的变量或函数,使得可以在当前文件中使用它们。 - **Volatile关键字**:表示变量的值可能会被意外改变,阻止编译器对其进行优化。通常用于中断处理、多任务环境...

    嵌入式LinuxC语言面试试题1.pdf

    答:可以使用extern关键字来声明变量; 二、 指针数组和字符数组 1. 如何定义一个有10个元素的整数型指针数组?答:可以使用指针数组的定义方式,如int *(*p)[10]; 2. 如何初始化一个字符数组?答:可以使用字符...

    华三linuxC语言面笔试精选

    可以通过extern关键字或引用头文件的方式来引用已定义的全局变量,前者在编译时不会检查变量名是否正确,后者则会在编译阶段进行检查。 #### 全局变量在多文件中的定义 全局变量可以在多个.C文件中声明,但只能在...

    c语言与c++基础知识点(必看)

    2、extern关键字:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一...

    linux下C++动态链接C++库示例

    有些编译器甚至在不同版本间更换mangling算法(尤其是g++ 2.x和3.x)。 即使您搞清楚了您的编译器到底怎么进行mangling的,从而可以用dlsym调用函数了, 但可能仅仅限于您手头的这个编译器而已,而无法在下一版...

    Linux C编程一站式学习

    最后,书中详细探讨了链接过程,解释了多目标文件的链接、声明和定义的区别、extern和static关键字的作用,以及静态库的使用。此外,还提到了动态链接和装载过程,帮助读者理解程序在Linux系统中的实际运行方式。 ...

    Linux将多个C源文件编译进一个KO模块驱动示例

    1. **创建主C源文件**:这个文件通常被称为`main.c`或`driver.c`,它会包含上述的基本模块结构,并通过`extern`关键字引用其他源文件中的函数。 2. **组织源文件**:其他C源文件(如`function1.c`、`function2.c`)...

    linux qt 动态链接库 静态链接库.docx

    在上面的代码中,我们使用 `extern "C"` 关键字来调用 C 函数 `hello`。 五、结论 动态链接库和静态链接库是 Qt 开发者必备的技能。了解它们的使用可以帮助我们更好地掌握 Qt 框架,提高应用程序的可重用性和灵活...

    你可能不知道的,定义,声明,初始化

    extern 关键字用于在头文件中声明变量或函数,然后在源文件中定义它们。例如,extern int a; 是对变量 a 的声明,而不是定义。 struct 的声明、定义和初始化 struct 是一种复杂的数据结构,可以包含多个变量和函数...

    linux模块间函数调用通讯

    - 在模块B中,使用`extern`关键字声明需要调用的函数。 示例: ```c // 模块A.c EXPORT_SYMBOL(my_function); // 模块B.c extern int my_function(); ``` #### 三、问题排查与解决方案 在实际开发中,可能会遇到...

    嵌入式C精华(主要是针对在linux系统)

    - **`extern "C"`的含义**:在C++中使用`extern "C"`关键字可以确保函数或变量按照C语言的方式链接,这对于C与C++代码的混合编程尤其重要,有助于避免命名冲突。 - **`void`与`void`指针**:`void`关键字在C/C++...

Global site tag (gtag.js) - Google Analytics