En gros on ne peut pas faire un code qu'avec du ternaire est jamais de if. PS: le code de mon post précédent est faux ou pas complet, j'ai fait une mauvaise manip avec codeblock et j'ai cru qu'il fonctionnait. 27 mai 2008 à 13:18:35
D'ailleur en me relisant y a un léger soucis dans ce que je t'ai donné (renvoit un int et non un char*)
Quoi qu'il en soit, pour programmer en C, tu peux très bien te passer du ternaire (qui ne sert dans la quasi totalité des cas qu'à écrire moins de lignes... ), alors que les if sont indispensables. Donc chercher à remplacer les if ne me semble pas être une bonne approche. Anonyme
27 mai 2008 à 13:29:07
Pourquoi utiliser une variable en plus? Mes souvenirs du C sont vieux, mais ce code marche: #include
int main(void)
int age = 18;
printf("tu es%s\n", (age > 17)? "majeur": "mineur");
Je ne vois pas pourquoi il faut éviter les ternaires, dans des cas comme celui-ci, ça permet d'éviter beaucoup de code plutôt superflu. Opérateur ternaire en C - C. Par contre, si il avait fallu faire d'autres opérations dépendant de la majorité du bonhomme...
15 juillet 2020 à 12:52:58
Sorry
- Edité par alama 15 juillet 2020 à 12:56:44
Ne baisse jamais les bras, car c'est a ce moment là que le miracle risque de se produire..
15 juillet 2020 à 17:08:55
Bonjour,
Citation des règles générales du forum:
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
- Opérateur ternaire c.k
Opérateur Ternaire C.K
⌚ Reading time: 4 minutes
Le code suivant compile avec G++ 4. 6. 1, mais pas avec Visual Studio 2008
return (m_something == 0)? throw std::logic_error("Something wrong happened"): m_something;
Le fait est que le compilateur Visual Studio effectue un crash interne. Je veux savoir s'il s'agit de C++ standard et pourquoi il ne compile pas avec Visual Studio, mais le fait avec G++? John Marshall
C'est du C++ standard. L'une ou l'autre (ou les deux) des expressions then/else dans une expression conditionnelle est autorisée à être une expression de lancement à la place (C++98 5. 16/2). Si Visual Studio plante lors de sa compilation… cela semblerait dommage! Opérateur ternaire c.m. Ben Voigt
Comeau le compile sans erreur (voici mon cas de test minimal compilable):
int main(void)
{
int x = 17;
return x? throw "Something wrong happened": 5;}
ce qui est une assez bonne preuve que c'est autorisé par la norme. Il en va de même pour le fait que MSVC se bloque, plutôt que d'échouer proprement avec une erreur. En outre, il semble être corrigé dans VC++ 2010
R:>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.
Le caractère initial de
remplace le caractère nul à la fin de
[... ]
Ainsi, nous pouvons voir que le
s1
est une
chaîne, pas un
littéral de chaîne. Cependant, comme le contenu de
n'est modifié en aucune façon, il peut très bien s'agir d'un
Dans
printf("Hi" "Bye");
vous avez deux tableaux consécutifs de caractères que le compilateur peut transformer en un seul tableau. printf("Hi" (test? "Bye": "Goodbye"));
vous avez un tableau suivi d'un pointeur sur char (un tableau converti en pointeur sur son premier élément). [c#] Qu’est ce que l’opérateur ternaire ou opérateur conditionnel ?. Le compilateur ne peut pas
fusionner
un tableau et un pointeur. La concaténation littérale de chaîne est effectuée par le pré-processeur au moment de la compilation. Cette concaténation n'a aucun moyen de prendre conscience de la valeur de
test, qui n'est pas connue avant que le programme ne soit réellement exécuté. Par conséquent, ces littéraux de chaîne ne peuvent pas être concaténés. Comme le cas général est que vous ne devriez pas avoir une construction comme celle-ci pour les valeurs connues au moment de la compilation, le standard C a été conçu pour limiter la fonctionnalité de concaténation automatique au cas le plus fondamental: lorsque les littéraux sont littéralement droits les uns à côté des autres.