mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2026-02-28 11:50:57 +01:00
added 18.07
git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2049 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
[[Property:title|CECIL - Eiffel to C]]
|
||||
[[Property:weight|1]]
|
||||
[[Property:uuid|3d1df3fe-2ac8-1ba3-c846-8329ea8a3772]]
|
||||
==array==
|
||||
|
||||
This example shows how to create a C array from an existing Eiffel array.
|
||||
|
||||
After you have done the appropriate steps to compile the example, you will get a `cecil.exe` on windows, or `cecil` on Unix.
|
||||
|
||||
Launch the program and you will be prompted for 10 integers that will be inserted in an Eiffel array, it will then initialize the C array and display it.
|
||||
|
||||
A typical output will be:
|
||||
<code>
|
||||
$ ./cecil
|
||||
This example create n array on the Eiffel side and print it on the C side
|
||||
Enter 10 integers:
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
|
||||
Displaying from C
|
||||
@1 = 1
|
||||
@2 = 2
|
||||
@3 = 3
|
||||
@4 = 4
|
||||
@5 = 5
|
||||
@6 = 6
|
||||
@7 = 7
|
||||
@8 = 8
|
||||
@9 = 9
|
||||
@10 = 10
|
||||
</code>
|
||||
|
||||
==object==
|
||||
This example shows the Eiffel memory management and all issues when passing an Eiffel object reference to C. In the example, you can edit the file `root_class.e` to modify the example:
|
||||
<code>
|
||||
--give_to_c (o1)
|
||||
give_to_c_by_pointer ($o1) -- Choose the way you pass it
|
||||
</code>
|
||||
When you choose the first possibility (commented by default), give_to_c will use the CECIL API eif_adopt to keep a reference on the Eiffel object. When you choose the second possibility, give_to_c_by_pointer will use the CECIL API eif_protect to keep a reference on the Eiffel object. Until forget_from_c is called from the C side, the object o1 will not be collected since we have protected it through the call to give_to_c or give_to_c_by_pointer. At the end after the object o1 is collected, we try to perform an operation on it which will fail with a call on void target exception. A typical output will be:
|
||||
<code>
|
||||
$ cecil
|
||||
Creating o1
|
||||
Object string is o1
|
||||
Give it to C
|
||||
Losing reference to initial o1 from Eiffel
|
||||
Collecting...
|
||||
Display new o1:
|
||||
Object string is o2
|
||||
Display o1 given to C:
|
||||
Object string is o1
|
||||
Losing reference from C
|
||||
Losing reference from Eiffel
|
||||
Collecting...
|
||||
An Eiffel object of type OBJECT is collected
|
||||
Old o1 forgot from both C and Eiffel:
|
||||
Raise a Void exception..
|
||||
|
||||
cecil: system execution failed.
|
||||
Following is the set of recorded exceptions:
|
||||
-------------------------------------------------------------------------------
|
||||
Class / Object Routine Nature of exception Effect
|
||||
-------------------------------------------------------------------------------
|
||||
ROOT_CLASS make @26 display:
|
||||
<30068030> Feature call on void target. Fail
|
||||
-------------------------------------------------------------------------------
|
||||
ROOT_CLASS make @26
|
||||
<30068030> Routine failure. Fail
|
||||
-------------------------------------------------------------------------------
|
||||
ROOT_CLASS root's creation
|
||||
<30068030> Routine failure. Exit
|
||||
-------------------------------------------------------------------------------
|
||||
An Eiffel object of type OBJECT is collected
|
||||
</code>
|
||||
|
||||
==string==
|
||||
This example shows how to create a C string from an existing Eiffel string. After you have done the appropriate steps to compile the example, you will get a `cecil.exe` on windows, or `cecil` on Unix. Launch the program and you will be prompted for a string from Eiffel and a C string will be created and display. A typical output will be:
|
||||
<code>
|
||||
$ cecil
|
||||
Enter a string to convert into a C string:
|
||||
Hello World!
|
||||
|
||||
Here is the C string:
|
||||
Hello World!
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user