Use another language to call a function: Difference between revisions

Content added Content deleted
m (add link to Delphi for pascal)
Line 85: Line 85:


=={{header|C}}==
=={{header|C}}==
This is a restatement of the problem, it is not a solution. Please remove it.
<lang c>#include <stdio.h>
<lang c>#include <stdio.h>


Line 105: Line 106:
}
}
}</lang>
}</lang>
I rewrote the driver as
<lang c>#if 0
I rewrote the driver according to good sense, my style,
and discussion --Kernigh 15:45, 12 February 2011 (UTC).

This is file main.c on Autumn 2012 ubuntu linux release.
The emacs compile command output:

-*- mode: compilation; default-directory: "/tmp/" -*-
Compilation started at Mon Mar 12 20:25:27

make -k CFLAGS=-Wall main.o
cc -Wall -c -o main.o main.c

Compilation finished at Mon Mar 12 20:25:27
#endif

#include <stdio.h>
#include <stdlib.h>

extern int Query(char*Data,unsigned*Length);
int main(int argc,char*argv[]) {
char Buffer[1024], *pc;
unsigned Size = sizeof(Buffer);
if (!Query(Buffer,&Size))
fputs("failed to call Query",stdout);
else
for (pc = Buffer; Size--; ++pc)
putchar(*pc);
putchar('\n');
return EXIT_SUCCESS;
}
</lang>
With solution
<lang c>
#if 0
This is file query.c

-*- mode: compilation; default-directory: "/tmp/" -*-
Compilation started at Mon Mar 12 20:36:25

make -k CFLAGS=-Wall query.o
cc -Wall -c -o query.o query.c

Compilation finished at Mon Mar 12 20:36:26
#endif

#include<string.h>

int Query(char*Data,unsigned*Length) {
char*message = "Here am I";
unsigned n = strlen(message);
if (n <= *Length)
return strncpy(Data,message,(size_t)n), *Length = n, 1;
return 0;
}
</lang>
And finally, excitement!
<lang bash>$ gcc main.c query.o -o main && ./main
Here am I
$
</lang>


=={{header|Delphi}}==
=={{header|Delphi}}==