2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Le langage C définit des symboles prédéfinis qui peuvent être utilisés directement et traités lors du prétraitement.
__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
Résultats de test:
#define est utilisé pour écrire la définition lors de la définition d'une constante :
#define MAX 100
La règle logique est de remplacer directement MAX par 100 lorsqu'il apparaît dans le code suivant. Cette étape de l'opération est réalisée lors de l'étape de prétraitement. Généralement, lors de l'utilisation de #define pour définir une constante, le nom est écrit en majuscule.
scènes à utiliser :
Lorsque #define est utilisé pour définir des macros, la méthode est similaire à celle des fonctions, mais la logique est de remplacement. Lors du remplacement, les variables doivent être placées entre parenthèses pour éviter les problèmes de priorité des opérateurs et entraîner des résultats inattendus.
Comment utiliser:
#define MAX(x,y) ((x) > (y) ? (x) : (y))
Il s'agit d'une macro écrite pour compléter le jugement de la valeur directement plus grande de deux nombres. Notez que les parenthèses après le nom de la macro doivent être proches de la macro.
Cas d'utilisation:
À travers les deux cas ci-dessus, nous pouvons constater que les macros ne limitent pas le type lors du passage des paramètres. Si la fonction est passée, le type de retour de la fonction est fixe et la macro s'exécute plus rapidement.
Avantages des macros :
- 1. Lorsque vous effectuez des calculs avec une petite quantité de code, le temps de travail des macros est plus court que celui des fonctions.
- 2. Plus important encore, les paramètres de la fonction doivent être déclarés avec des types spécifiques. Les macros peuvent être appliquées à différents types qui peuvent être comparés en utilisant >. Le type de macro n'a pas d'importance.
Inconvénients des macros :
- Chaque fois qu'une macro est utilisée, une copie du code de définition de la macro sera insérée dans le programme. À moins que la macro ne soit relativement courte, cela peut augmenter considérablement la durée du programme.
- Les macros ne peuvent pas être déboguées.
- Puisque les macros sont indépendantes du type, elles ne sont pas assez rigoureuses.
- Les macros peuvent provoquer des problèmes de priorité des opérateurs, rendant les programmes sujets à des erreurs.
Tableau comparatif des macros et fonctions :
Les attributs | #définir les macros définies | fonction |
---|---|---|
longueur du code | La macro est insérée dans le programme à chaque utilisation.Sauf pour les très petites macros, la durée du programme augmentera considérablement | Le code de fonction n'apparaît qu'à un seul endroit ; chaque fois qu'il est utilisé, le même code à cet endroit est appelé. |
Vitesse d'exécution | plus rapide | Il y a la surcharge supplémentaire liée aux appels et aux retours de fonctions, qui est plus lente. |
priorité des opérateurs | Les paramètres des macros sont évalués dans le contexte de toutes les expressions environnantes. À moins que des parenthèses ne soient incluses, la priorité des opérateurs adjacents peut avoir des conséquences imprévisibles. Il est donc recommandé d'écrire les macros avec davantage de parenthèses. | Les paramètres de fonction ne sont évalués et transmis à la fonction que lorsque la fonction est appelée. Les expressions sont évaluées de manière prévisible. |
Paramètres avec effets secondaires | Les paramètres peuvent être remplacés à plusieurs emplacements dans le corps de la macro, et si les paramètres d'une macro sont évalués plusieurs fois, l'évaluation des paramètres avec des effets secondaires peut produire des résultats imprévisibles. | Les paramètres de fonction ne sont évalués que lors du passage des paramètres et sont faciles à contrôler. |
Type de paramètre | Les paramètres de la macro n'ont rien à voir avec le type. Tant que l'opération sur les paramètres est légale, elle peut être utilisée pour n'importe quel type de paramètre. | Les paramètres de la fonction sont liés au type. S'ils sont différents, des fonctions différentes sont nécessaires et les tâches sont différentes. |
déboguer | Les macros ne sont pas pratiques à déboguer | Les fonctions peuvent être déboguées instruction par instruction |
récursivité | Les macros ne peuvent pas être récursives | Les macros ne peuvent pas être récursives |
L'opérateur #convertit un argument d'une macro en chaîne littérale. Il est uniquement autorisé à apparaître dans la liste de substitution d'une macro avec paramètres.
L'opération effectuée par l'opérateur # peut être comprise comme une « stringification ».
Exemple d'utilisation :
## peut combiner les symboles des deux côtés en un seul symbole, ce qui permet aux définitions de macros de créer des identifiants à partir de segments de texte distincts.colle pour marqueurs
Une telle connexion doit produire un identifiant valide. Sinon, le résultat n'est pas défini. Pensons-y ici. Lors de l'écriture d'une fonction pour trouver la plus grande valeur de deux nombres, différentes fonctions doivent être écrites pour différents types de données.
Exemple d'utilisation :