435,132 Members | 1,425 Online
Need help? Post your question and get tips & solutions from a community of 435,132 IT Pros & Developers. It's quick & easy.

# write a single line C program whose output is the program itself

 P: n/a Hi ALL, I have a silly question... (may be) Can we write a single line C program whose output is the program itself? Is anybody know the answer please tell me. Puneet Nov 14 '05 #1
16 Replies

 P: n/a The c standard doesn't say anything about how a program is in memory. So to make a program that does this on every system will probably not be possible. On some systems (like windows), if you compile your program without any optimisation everything usaly end up in memory almost as you write the program. This means that the following would print out it self on some systems: int main(void) { unsigned char *pCur = (unsigned char*)main, *pEnd = (unsigned char*)emptyfunc; while(pCur < pEnd) printf("%c", *pCur++); } void emptyfunc(void) { return; } This isn't something you usaly would want to do. It's much bether to get a disassembler. -- bjrnove Nov 14 '05 #2

 P: n/a I forgot to declare emtyfunc, so you will have to add void emptyfunc(); before main. :-) -- bjrnove Nov 14 '05 #3

 P: n/a Puneet said,on 3/16/2005 3:53 PM: Hi ALL, I have a silly question... (may be) Can we write a single line C program whose output is the program itself? Is anybody know the answer please tell me. Puneet google for Quine... you'll get lots of such programs... -- Shanmu. Nov 14 '05 #4

 P: n/a On 16 Mar 2005 02:23:49 -0800, "Puneet" wrote:Can we write a single line C program whose output is the programitself? Ken Thompson mentions this in his classic paper "Reflections on Trusting Trust" (from Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763). This paper is available from: http://www.acm.org/classics/sep95/ If you've not already seen it, it's well worth a read. Roy Nov 14 '05 #5

 P: n/a In article , Roy Hills wrote:On 16 Mar 2005 02:23:49 -0800, "Puneet" wrote:Can we write a single line C program whose output is the programitself?Ken Thompson mentions this in his classic paper "Reflections onTrusting Trust" (from Communication of the ACM, Vol. 27, No. 8, August1984, pp. 761-763). Note that the one he presents won't fit on one line. But you can just take out the line breaks to get everything but the preprocessor directives on one line, and most implementations let you invoke the preprocessor separately to get a (nonportable) program that can have all the line breaks removed and still be valid... dave ('twill be a long line though) -- Dave Vandervies dj******@csclub.uwaterloo.ca So you consider it a lie to express an opinion that is supported by facts? Interesting, and presumably the reason why so many of your opinions are *not* supported by facts. --Richard Heathfield roasts a troll in comp.lang.c Nov 14 '05 #6

 P: n/a Dave Vandervies wrote: In article , Roy Hills wrote:On 16 Mar 2005 02:23:49 -0800, "Puneet" wrote:Can we write a single line C program whose output is the programitself?Ken Thompson mentions this in his classic paper "Reflections onTrusting Trust" (from Communication of the ACM, Vol. 27, No. 8, August1984, pp. 761-763). Note that the one he presents won't fit on one line. But you can just take out the line breaks to get everything but the preprocessor directives on one line, and most implementations let you invoke the preprocessor separately to get a (nonportable) program that can have all the line breaks removed and still be valid... dave ('twill be a long line though) Does the OP mean output the source of the program, or output the program though? Nov 14 '05 #7

 P: n/a On 16 Mar 2005 02:23:49 -0800, "Puneet" wrote:Can we write a single line C program whose output is the programitself? Some of we can. It's not proper C or portable. With 2 lines, it can be. -- #include _ Kevin D Quitt USA 91387-4454 96.37% of all statistics are made up Per the FCA, this address may not be added to any commercial mail list Nov 14 '05 #8

 P: n/a On Wed, 16 Mar 2005 pe**************@yahoo.com wrote: Roy Hills wrote: "Puneet" wrote: Can we write a single line C program whose output is the program itself? Ken Thompson mentions this in his classic paper "Reflections on Trusting Trust" (from Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763). Does the OP mean output the source of the program, or output the program though? If you think there's a quantitative difference, then you haven't been programming long enough. -Arthur Nov 14 '05 #9

 P: n/a Kevin D. Quitt wrote: On 16 Mar 2005 02:23:49 -0800, "Puneet" wrote:Can we write a single line C program whose output is the programitself? Some of we can. It's not proper C or portable. With 2 lines, it can be. $gcc -std=c99 -Wall -W -pedantic -O fixpointOneLine.c$ ./a.out int printf(const char*s,...);char*p="\\int printf(const char*s,...);char*p=%c%c%s%c,n='%cn',q='%c',*m=%c%s %c;%s%c",n='\n',q='"',*m="int main(){return!printf(p+1,q,*p,p,q,*p,q,q,m,q,m,n); }";int main(){return!printf(p+1,q,*p,p,q,*p,q,q,m,q,m,n); } $./a.out | diff - fixpointOneLine.c$ wc fixpointOneLine.c 1 7 245 fixpointOneLine.c Daniel Vallstrom Nov 14 '05 #10

 P: n/a Hello All, Thanx for taking the question seriously. i clear the question is can we write a code which prints the program itself. means whatever code we written, in output it showz the whole program. But code should be in one line. Puneet Nov 14 '05 #11

 P: n/a On 17 Mar 2005 04:59:26 -0800, "Puneet" wrote:Thanx for taking the question seriously. Right. Did you try compiling the gibberish he posted? -- #include _ Kevin D Quitt USA 91387-4454 96.37% of all statistics are made up Per the FCA, this address may not be added to any commercial mail list Nov 14 '05 #12

 P: n/a On 17 Mar 2005 04:59:26 -0800, in comp.lang.c , "Puneet" wrote: i clear the question is can we write a code which prints the programitself. means whatever code we written, in output it showz the wholeprogram. Its called a quine and a websearch will find plenty. But code should be in one line. thats easy. Linebreaks are irrelevant to C, they're just more whitespace. ps its spelt shows not showz -- Mark McIntyre CLC FAQ CLC readme: ----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- Nov 14 '05 #13

 P: n/a Mark McIntyre wrote: ...Linebreaks are irrelevant to C, they're just more whitespace. They are relevant to preprocessing in general, but particularly to directives. -- Peter Nov 14 '05 #14

 P: n/a On Wed, 16 Mar 2005 15:00:57 -0500 (EST), in comp.lang.c , "Arthur J. O'Dwyer" wrote: On Wed, 16 Mar 2005 pe**************@yahoo.com wrote: Roy Hills wrote: Does the OP mean output the source of the program, or output the program though? If you think there's a quantitative difference, then you haven'tbeen programming long enough. Hmm. There's no difference between outputting the source, and outputting the machine code.... ? -- Mark McIntyre CLC FAQ CLC readme: ----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- Nov 14 '05 #15

 P: n/a Puneet wrote: i clear the question is can we write a code which prints the program itself. means whatever code we written, in output it showz the whole program. But code should be in one line. The very post you replied to contains a one line quine which does what you want! Here is a repost of the program (meant to be on one line): int printf(const char*s,...);char*p="\\int printf(const char*s,...);char*p=%c%c%s%c,n='%cn',q='%c',*m=%c%s %c;%s%c",n='\n',q='"',*m="int main(){return!printf(p+1,q,*p,p,q,*p,q,q,m,q,m,n); }";int main(){return!printf(p+1,q,*p,p,q,*p,q,q,m,q,m,n); } Daniel Vallstrom Nov 14 '05 #16

 P: n/a Peter Nilsson wrote: Mark McIntyre wrote: ...Linebreaks are irrelevant to C, they're just more whitespace. They are relevant to preprocessing in general, but particularly to directives. More to the point they affect any solution to the problem at hand. Daniel Vallstrom Nov 14 '05 #17

### This discussion thread is closed

Replies have been disabled for this discussion.