Newsgroup: it.comp.lang.c
Titolo: " " ' '

A grosse linee...quando si usa l'apice e il doppio apice nel passaggio di
parametria o condizioni?
Nei listati spesso e volentieri trovo " " ma ogni tanto in qualche
istruzione c'è ' '...non credo che i due abbiano lo stesso significato!
thx
Byez
B@STI

 ha scritto nel messaggio
news:xJdu8.14571$b62.4...@news1.tin.it...


parametria o condizioni?
" indica una stringa, ' indica un carattere.
"pippo"   una stringa
"a"       una stringa
'a'       un singolo carattere (cioè un char)
'pippo'   non ha senso!
Nota che 'a' è in realtà un numero intero che corrisponde al valore
numerico che la lettera "a" ha nell'insieme di caratteri usato dalla
tua machina (se usa l'ASCII è 97). Quindi "int numero = 'a';" è
corretto.
Ammetto la mia ignoranza, non so come si deve comportare un
compilatore standard nell'ultimo caso cioè scrivendo 'pippo'.
g++ 2.95 e VC++6 mi danno solo un warning e ignorano i caratteri in
più; è corretto?
-- 
Marco Barisione (ICQ 84277092)

Gli apici '' si indicano per indicare un singolo const char, mentre le
virgolette "" vengono usate per indicare una stringa completa di nul
terminator.
Attenzione, perche 'a' != "a" infatti 'a' indica è di tipo const char ed
indica un solo carattere mentre "a" è di tipo const char* ed è quindi un
puntatore ad una stringa di 2 elementi, il carattere a e il nul terminator
\0
Dome

 più; è corretto?
Che warning level hai settato? Io uso VC++6 e mi da il seguente errore:
char c = 'pippo';
error C2015: too many characters in constant
error C2252: 'c' : pure specifier can only be specified for functions
Dome

error C2252: 'c' : pure specifier can only be specified for functions
Il codice è questo:
int main(){
    char a = 'AAA';
    char c = 'AAAAA';
}
VC++ mi dà warning per il primo caso ed errore per il secondo (warning
level 3, quello di default mi pare):
|warning C4305: 'initializing' : truncation from 'const int ' to 'char 
|error C2015: too many characters in constant
Non riesco a capire il perché.
gcc invece mi dà warning in tutti e due i casi:
|_aaa.c: In function `main':
|_aaa.c:2: warning: multi-character character constant
|_aaa.c:2: warning: overflow in implicit constant conversion
|_aaa.c:3: character constant too long
|_aaa.c:3: warning: overflow in implicit constant conversion



perche':
sizeof( 'a' )==sizeof( int )
in pratica una costante come 'a' puo' contenere tanti caratteri quanti ne
possono stare in un intero della tua macchina, per esempio su una
piattaforma 32 bit e' corretto scrivere 'abcd'.
ciao
donCiccio

piattaforma 32 bit e' corretto scrivere 'abcd'.
La tua frase iniziale non e' corretta: una costante 'a' e'
un intero, in C, nient'altro.  In un'assegnazione come
quella compiuta da Marco, le stringhe costanti non possono
essere piu' lunghe di 1 o di 2 caratteri.  Il C++ Builder,
per esempio, non ti consente di compilare il codice di
Marco.  Inoltre, anche usando 'AA', il compilatore la tronca
in 'A'.  Tutto viene troncato, cioe', al singolo carattere.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

in 'A'.  Tutto viene troncato, cioe', al singolo carattere.
Quale è allora il senso di permettere 2 caratteri? Lo standar dcosa
dice esattamente?


 ha scritto nel messaggio
news:3cbaf432...@news.tin.it...

non e' tutto vero quello che dici :-) (lo so non cambio mai).
in C++ hai ragione sizeof( char )==1, ma in C e' come ho detto io.
VC++ compila in C se l'estensione e' .C come tutti gli altri compilatori.
ho provato questo codice con VC++ 5.0:
#include <stdio.h>
int main ( void )
{
 int a='abcd';
 printf( "%X\n",a );
 return a;
}
compila, e' corretto, l'output e' 61626364.
nel caso di Marco e' ovvio che se assegni la costante ad un char verra'
troncata, come un qualsiasi intero.
ciao
donCiccio

troncata, come un qualsiasi intero.
Sì è vero, mi stavo domandando il perché ma sono così scemo da non
essermi accorto che stavo assegnando ad un char :-)


> in C++ hai ragione sizeof( char )==1, ma in C e' come ho detto io.
Perchè, in C sizeof( char ) quanto vale?! Al mio paese ancora 1!!!! O mi
sbaglio?
Dome

 sbaglio?
sbaglio io e' vero, chiedo scusa
volevo scrivere sizeof( 'a' )==1, e' di quello che si stava parlando.
ciao
donCiccio

 sbaglio?
Si`, e` 1 per definizione.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Porc i' mond che cio' sott i piedi!
V. Catozzo

 l'apice singolo si usa quando devi indicare una costante char tipo if
non solo char, ad es.
long int s;
s='CIAO';
printf("%X\n",s);
credo sia consentito, io lo uso spesso per controllare una DWORD come
'RIFF' (header dei WAV)
--
-----------------------
    Peruch Emiliano
    Softway S.r.l.
-----------------------