Outils pour utilisateurs

Outils du site


lang:c:syntaxe

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:c:syntaxe [2020/03/06 20:41] – [__attribute__((const)) vs __attribute__((pure))] rootlang:c:syntaxe [2020/03/06 20:46] (Version actuelle) – [__attribute__((weak))] : déplacement dans la page "Attribut" root
Ligne 6: Ligne 6:
 =====Attribute===== =====Attribute=====
  
-====__attribute__((const)) vs __attribute__((pure))==== 
-Les fonctions ''pure'' et ''const'' ne modifient aucune donnée. La différence est que deux appels consécutifs à une fonction ''pure'' ne renverront pas toujours le même résultat contrairement à une fonction ''const'' où les résultats seront toujours les mêmes. 
  
-''pure'' a accès aux arguments et aux variables globales et peut déréférencer un pointeur dont le contenu peut changer entre deux appels. 
  
-''const'' n'a accès qu'aux arguments et ne peut pas déréférencer un pointeur. 
- 
-<blockquote>The const attribute imposes greater restrictions on a function’s definition than the similar pure attribute. 
- 
-The const attribute prohibits a function from reading objects that affect its return value between successive invocations. 
- 
-In general, since a function cannot distinguish data that might change from data that cannot, const functions should never take pointer or, in C++, reference arguments. 
- 
-<cite>[[https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes|Using the GNU Compiler Collection]], {{ :lang:c:attribut:using_the_gnu_compiler_collection_gcc_common_function_attributes_2020-03-06_20_33_39_.html |Archive v9.2 le 06/03/2020}}</cite></blockquote> 
- 
-====__attribute__((weak))==== 
-Définir une variable (globale) ou une fonction avec un attribut ''weak'' indique au lieur un lien faible. Si  le même symbole (sans ''weak'') est trouvé par le lieur, c'est celui-là qui le remplacera. 
- 
-Il est aussi possible de définir un prototype ou la déclaration d'une variable ''extern'' en ''weak''. Dans ce cas, si le symbole n'est pas défini (avec ou sans l'attribut ''weak''), le lieur ne posera pas de problème (pas de ''undefined reference to'') et considérera que le symbole est à l'adresse ''null'' (attention aux pointeurs null). 
- 
-<code c> 
-extern const unsigned char __attribute__((weak)) variable; // Numéro de l'automate 
- 
-const unsigned char __attribute__((weak)) variable = 1; 
- 
-const unsigned char variable = 2; 
-</code> 
 =====Passage par référence d'un tableau dans une fonction===== =====Passage par référence d'un tableau dans une fonction=====
 ''int & tab[10]'' n'est pas la bonne syntaxe à cause de la priorité des opérateurs. La bonne syntaxe est : ''int & tab[10]'' n'est pas la bonne syntaxe à cause de la priorité des opérateurs. La bonne syntaxe est :
lang/c/syntaxe.1583523664.txt.gz · Dernière modification : 2020/03/06 20:41 de root