7
votes

Quelle est la différence entre "Hello" et {"Bonjour"}?

en C / C ++, quelle est la différence entre le code de ligne suivant: xxx


10 commentaires

aucune différence. Ils brisent tous les deux la compilation


@ Bјовић au moins en C ++, mais pas en C (et qui sait ce que "C / C ++" est).


@Christianrau - Je sais exactement ce que signifie "C / C ++", et je soupçonne que vous le faites aussi.


@Petebecker la seule chose une question "x en c / c ++?" peut dire que signifie "x en c? X en C ++? ". C'est mauvais parce qu'il est mauvais de poser plusieurs questions dans la même question. Au moment de ce commentaire, il existe une réponse qui ne s'applique qu'à C ++ et une autre qui ne s'applique qu'à C. meta.stackexchange.com/questions/39223/...


@Petebecker Bien sûr que je le sais, le sarcasme était intentionnel. Et en fait, cette question est l'une des instances où C / C ++ est totalement inappropriée (même si je suis d'accord, cela peut parfois être approprié, mais ce n'est souvent pas, car le PO n'est généralement pas au courant de son implications), puisque la réponse est différente pour les deux langues. Je comprends que les réponses sont souvent les mêmes pour C et C ++ (au moins pour les questions de langage pur et de la norme), mais ici elles ne sont certainement pas.


@ Bјовић: Veuillez expliquer comment cela est censé casser la compilation. O.o


@netcoder char * str1 = "bonjour"; ne compile pas pour C ++


@ Bјовић: Cela ne casse pas la compilation. Il émet un avertissement en C ++ ( chaînes d'écriture iirc) et compile tout simplement bien dans C.


@netcoder pas avec -werror. Quoi qu'il en soit, ignoreriez-vous un avertissement?


@ Bјовић: Non, je ne le ferais pas. C'est obsolète et il est découragé, oui tu as raison de ça. Je soulignais simplement que cela ne casse pas la compilation en soi, probablement pour des raisons de compatibilité avec C. :)


4 Réponses :


6
votes

style uniquement dans ce cas. Ils ont tous deux résultat la même chose et ils sont tous deux mauvaises. Vous auriez dû utiliser const char * str1 = "bonjour"; .


4 commentaires

{"Bonjour"} N'est-il pas considéré comme une matrice? Comme nous savons que nous savons définir le tableau, nous écrivons dans {} m juste confondre à ce sujet et que vous êtes si char * str2 = {"Bonjour", "Bonjour"}; dans ce cas


@Jensgustedt veuillez dire quelle est la définition des types scalaires?


@yejinxin, c'est vraiment un concept de base en C, ce sont les types intégrés, les types flottants et les types de pointeur


@Jensgustedt, eh bien, je suppose que mon anglais est trop pauvre ... je le sais maintenant.



-1
votes

Il n'y a pas de différence entre un tableau et une "chaîne", due une chaîne est une gamme de caractères.


0 commentaires

2
votes

voir https://stackoverflow.com/a/3462768/153225 .

Les accolades sont redondantes. p>

Formulaire d'assembleur générant le code suivant avec "GCC -S" confirme qu'ils génèrent exactement la même chose (avec une constante légèrement différente dans chaque cas): P>

#include <iostream>
using namespace std;

void test1() {
    const char *str1="hello1";
    cout << str1 << endl;
}

void test2() {
    const char *str2={"hello2"};
    cout << str2 << endl;
}

int main() {
    test1();
    test2();
}


0 commentaires

10
votes

par la norme C 2011, article 6.7.9 Initialisation, paragraphe 11: "L'initialisateur d'un scalaire doit être une expression unique, éventuellement enfermée dans des accolades ..."

C'est ça. Il n'y a pas de différence sémantique; Les accolades peuvent simplement être présentes ou peuvent être absentes, sans changement à la signification.


0 commentaires