forked from johannesgerer/jburkardt-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mixed.html
198 lines (167 loc) · 5.13 KB
/
mixed.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<html>
<head>
<title>
MIXED - Mixed Language Programming
</title>
</head>
<body bgcolor="#EEEEEE" link="#CC0000" alink="#FF3300" vlink="#000055">
<h1 align = "center">
MIXED <br> Mixed Language Programming
</h1>
<hr>
<p>
<b>MIXED</b>
is a directory of C++ programs which
illustrate some issues in doing mixed language programming.
</p>
<h3 align = "center">
The world of bilingual programming
</h3>
<p>
Because higher level languages end up as machine code, there is
some reason to assume that you can write parts of a program in
two different languages; what is <b>not</b> standard is the
protocol for dealing with the differences in languages.
</p>
<p>
C++ supports (on purpose!) a scheme in which the names chosen
by a user for various functions are automatically <i>mangled</i>,
because it is assumed likely that the same name could be used
in different namespaces, so C++ avoids ambiguity by constructing
unique internal names when compiling. Unfortunately, this makes
it very difficult for programs written in other languages to
interact with a C++ program. One feature that can help
is the use of the statement
<pre>
external "C" { (list of function declarations) }
</pre>
in a C++ program in which name mangling is to be deactivated.
The list of function declarations can be either the names of
C routines to be called from this C++ routine, OR the names
of internal C++ routines that are to be called by an external
C routine.
</p>
<h3 align = "center">
Licensing:
</h3>
<p>
The computer code and data files described and made available on this web page
are distributed under
<a href = "../../txt/gnu_lgpl.txt">the GNU LGPL license.</a>
</p>
<h3 align = "center">
Languages:
</h3>
<p>
<b>MIXED</b> language programming examples are available in
<a href = "../../c_src/mixed/mixed.html">a C version</a> and
<a href = "../../cpp_src/mixed/mixed.html">a C++ version</a> and
<a href = "../../f77_src/mixed/mixed.html">a FORTRAN77 version</a> and
<a href = "../../f_src/mixed/mixed.html">a FORTRAN90 version</a>
</p>
<h3 align = "center">
Related Data and Programs:
</h3>
<p>
<a href = "../../cpp_src/c++_calls_c/c++_calls_c.html">
C++_CALLS_C</a>,
C++ programs which
call a C function.
</p>
<p>
<a href = "../../cpp_src/c++_calls_f77/c++_calls_f77.html">
C++_CALLS_F77</a>,
C++ programs which
illustrate how a C++ main program can call a FORTRAN77 subroutine.
</p>
<p>
<a href = "../../cpp_src/c++_calls_f90/c++_calls_f90.html">
C++_CALLS_F90</a>,
C++ programs which
illustrate how a C++ main program can call a FORTRAN90 subroutine.
</p>
<p>
<a href = "../../f77_src/f77_calls_c++/f77_calls_c++.html">
F77_CALLS_C++</a>,
FORTRAN77 programs which
illustrate how a FORTRAN77 program can call a C++ function.
</p>
<p>
<a href = "../../f_src/f90_calls_c++/f90_calls_c++.html">
F90_CALLS_C++</a>,
FORTRAN90 examples which
illustrates how a FORTRAN90 program can call a C++ function.
</p>
<h3 align = "center">
Reference:
</h3>
<p>
<ul>
<li>
<a href = "../../pdf/keinert.pdf">
Fritz Keinert,<br>
Calling FORTRAN Subroutines from Fortran, C and C++</a>,<br>
Mathematics Department,<br>
Iowa State University.
</li>
</ul>
</p>
<h3 align = "center">
Source Code:
</h3>
<p>
<b>EX1</b> uses a C++ main program, and several C functions.
Files you may copy include:
<ul>
<li>
<a href = "ex1_main.cpp">ex1_main.cpp</a>, the C++
main program;
</li>
<li>
<a href = "ex1_sub.c">ex1_sub.c</a>, C functions;
</li>
</ul>
</p>
<h3 align = "center">
Examples and Tests:
</h3>
<p>
<b>EX1_CC_CC</b> uses the CC compiler for both the C++ and C codes.
Files you may copy include:
<ul>
<li>
<a href = "ex1_CC_CC.sh">ex1_CC_CC.sh</a>,
commands to compile, link, load and run;
</li>
<li>
<a href = "ex1_CC_CC_output.txt">ex1_CC_CC_output.txt</a>,
the output file.
</li>
</ul>
</p>
<p>
<b>EX1_G++_GCC</b> uses the g++ compiler for the C++ and the gcc
compiler for the C code.
Files you may copy include:
<ul>
<li>
<a href = "ex1_g++_gcc.sh">ex1_g++_gcc.sh</a>,
commands to compile, link, load and run;
</li>
<li>
<a href = "ex1_g++_gcc_output.txt">ex1_g++_gcc_output.txt</a>,
the output file;
</li>
</ul>
</p>
<p>
You can go up one level to <a href = "../cpp_src.html">
the C++ source codes</a>.
</p>
<hr>
<i>
Last revised on 04 January 2006.
</i>
<!-- John Burkardt -->
</body>
</html>