• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            How do I call a C function from C++?

            Just declare the C function ``extern "C"'' (in your C++ code) and call it
            (from your C or C++ code). For example:
            	// C++ code

            extern "C" void f(int); // one way

            extern "C" { // another way
            int g(double);
            double h();
            };

            void code(int i, double d)
            {
            f(i);
            int ii = g(d);
            double dd = h();
            // ...
            }
            The definitions of the functions may look like this:
            	/* C code: */

            void f(int i)
            {
            /* ... */
            }

            int g(double d)
            {
            /* ... */
            }

            double h()
            {
            /* ... */
            }

            Note that C++ type rules, not C rules, are used. So you can't call function declared ``extern "C"''
             with the wrong number of argument. For example:
            	// C++ code

            void more_code(int i, double d)
            {
            double dd = h(i,d); // error: unexpected arguments
            // ...
            }

            How do I call a C++ function from C?

            Just declare the C++ function ``extern "C"'' (in your C++ code) and
            call it (from your C or C++ code). For example:
            	// C++ code:

            extern "C" void f(int);

            void f(int i)
            {
            // ...
            }
            Now f() can be used like this:
            	/* C code: */

            void f(int);

            void cc(int i)
            {
            f(i);
            /* ... */
            }
            Naturally, this works only for non-member functions. If you want to call
             member functions (incl. virtual functions) from C, you need to provide
             a simple wrapper. For example:
            	// C++ code:

            class C {
            // ...
            virtual double f(int);
            };

            extern "C" double call_C_f(C* p, int i) // wrapper function
            {
            return p->f(i);
            }
            Now C::f() can be used like this:
            	/* C code: */

            double call_C_f(struct C* p, int i);

            void ccc(struct C* p, int i)
            {
            double d = call_C_f(p,i);
            /* ... */
            }
            If you want to call overloaded functions from C, you must provide wrappers with distinct names
            for the C code to use. For example:
            	// C++ code:

            void f(int);
            void f(double);

            extern "C" void f_i(int i) { f(i); }
            extern "C" void f_d(double d) { f(d); }
            Now the f() functions can be used like this:
            	/* C code: */

            void f_i(int);
            void f_d(double);

            void cccc(int i,double d)
            {
            f_i(i);
            f_d(d);
            /* ... */
            }
            Note that these techniques can be used to call a C++ library from C code
            even if you cannot (or do not want to) modify the C++ headers.
            posted on 2008-07-19 01:39 chatler 閱讀(160) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
            <2009年4月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产亚洲精品| 韩国免费A级毛片久久| 亚洲日本va午夜中文字幕久久 | 久久精品人人做人人爽电影| 中文字幕无码精品亚洲资源网久久| 日韩av无码久久精品免费| www.久久热.com| 成人久久免费网站| 色综合合久久天天综合绕视看| 欧美精品乱码99久久蜜桃| 久久国产精品99精品国产987| 性做久久久久久久久浪潮| 免费国产99久久久香蕉| 亚洲愉拍99热成人精品热久久| 精品国产综合区久久久久久| 久久精品国产久精国产思思| 久久无码高潮喷水| 久久这里有精品视频| 国产精久久一区二区三区| 69国产成人综合久久精品| 久久综合给合久久狠狠狠97色69| 久久人人爽人人爽人人片AV麻豆| 久久综合九色综合97_久久久| 亚洲AV无码久久| 久久毛片一区二区| 久久久这里有精品| 四虎影视久久久免费| 精品人妻伦一二三区久久| 青青青国产成人久久111网站| 国产精品美女久久久久网| 国产精品青草久久久久婷婷| 久久综合狠狠综合久久综合88 | 久久精品中文字幕久久| 久久精品国产亚洲欧美| 久久免费高清视频| 国产精品视频久久久| 青青草原综合久久| 久久一区二区三区免费| 精品久久久久久久国产潘金莲 | 亚洲欧美伊人久久综合一区二区 | 东方aⅴ免费观看久久av|