程序设计Linux环境下外部程序设计(linux extern)
c语言中的extern怎么用?
extern在c中就是个外部申明,因为C是先申明再使用,当你想调用的变量或者函数不在你的模块当中,你可以使用外部申明。在使用外部申明的时候要特别注意,因为这只是个申明,并不是实体,当出现声明和实体不符的时候,编译器是不会管的,链接后就可能出现错误。比如你的实体是 int sample( int x ) ;而你在申明的时候是extern int sample( void ) ; 所以我不喜欢这种方式去声明。特别是多个人合作项目的时候,这种方法往往导致的结果很难去debug。即使是别人写好提供给你的,那他在修改了函数或者变量的类型,参数,往往会忘记修改给你的申明。
(图片来源网络,侵删)extern 还有个作用就是当你C和C++混用的时候,比如在C++中要使用C, 那么就要告诉编译器,你这段代码使用的是C,需要用C的编译器去编译,那可以使用extern "C" { .........} 否则编译会有问题
如何在C#工程中调用C语言外部库?
1、将DLL文件复制到编译路径目录(系统目录或项目目录等等);
2、导出DLL的功能接口;如:[DllImport("WDT_DIO64.dll")]internal static extern int InitDIO();这个DLL在C中的头文件是这样表达的:BOOL InitDIO(void);BOOL 在C中是int类型的,对应的C#也是int 类型,调用DLL通常都是静态的外部引进的(static extern),internal 是可见属性定义(自己根据需要定义);
(图片来源网络,侵删)3、参考DLL对应的头文件的信息。如果C/C++封装的dll是打算通用的,通常发布头文件,头文件在C中是编译器所需的文件,DLL的关键信息都在头文件展示出来。我们可以通过阅读头文件的包含信息(如结构体、宏定义,函数原型、功能注释等),使用C#方式来导出DLL的函数接口来调用DLL(如上2、)。
4、在需要的地方加上参数调用导出的函数接口。
extern是什么变量?
是一个修饰符。
(图片来源网络,侵删)在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
c语言中是如何实现模块化的?
c语言是模块化编程的工具,模块如何组织,模块之间如何交互应该是个大问题。我觉得有以下几个值得注意的地方(不对的地方请大家指正):
1、每个源文件就是一个独立的模块,它应该能够在不连接任何其它模块、不需要其它源文件的情况下独立编译。
2、模块之间是通过函数、常量、变量、结构定义、宏(似乎也是常量的一种)进行交互的
3、每个模块应该包括导入和导出两个部分,比如要调用另外一个模块的函数foo(),需要 extern int foo(); 这应该属于模块的导入部分 而由该模块提供的函数,应该在相应的头文件中声明,作为模块的导出部分。 模块的导出部分应该放在该模块的头文件中。
4、如果只在本模块使用的变量,在本模块中定义成static的就可以了;否则就是全局变量,全局变量在头文件中声明一下,同时也作为模块的导出部分。
5、宏既可以定义在头文件中,也可以定义在源文件中。如果宏只是模块中用到,相当于局部常量,放到源文件中好了;如果其它模块也要用到,那么把它放到头文件中去。
6、结构定义似乎都放在头文件中。是不是应该另外有一个头文件,专门用来定义结构??? 第一,我不知道自己的想法是否正确;第二,关于到底应该怎么样组织文件,我想应该也是有个标准的,可惜我没找到这样的资料。希望有高人能站出来指点一下,谢谢
到此,以上就是小编对于linux环境c程序设计的问题就介绍到这了,希望这4点解答对大家有用。