2012-04-21 15 views
5

¿Está garantizado que los literales de cadena se almacenen adyacentes en la memoria?¿Los literales de cadena están garantizados para estar adyacentes entre sí en la memoria?

por lo tanto el siguiente necesariamente obtener una salida hellohello

printf(3 + "%d"); 
printf("hello"); 
+3

La primera afirmación es un comportamiento indefinido, por lo que no se garantiza nada. – GManNickG

+0

Como regla general, no se garantiza casi nada en C y si se ve mal, probablemente sea un comportamiento indefinido. – hugomg

+5

Hay muchas cosas garantizadas en C, @missingno. Ese es todo el significado del Estándar ... – pmg

Respuesta

10

No, literales de cadena se almacenan dondequiera que sus fantasías compilador. El hecho de que hayas declarado dos de ellos en líneas consecutivas es irrelevante. No puede hacer suposiciones sobre dónde el compilador los almacenará.

El compilador puede hacer todo tipo de cosas. Por ejemplo, si se escribe el siguiente código

printf("hello"); 
printf("hello"); 

entonces el compilador es absoluta libertad para crear un único literal. O no.

+1

+1 buen avatar nuevo :) – MByD

+0

@BinyaminSharet Gracias. Es Oddie. –

+0

gracias por la aclaración y la ayuda. ¿Algo al respecto de los estándares C? – phoxis

Cuestiones relacionadas