URL: https://linuxfr.org/forums/programmation-c--2/posts/probl%C3%A8me-%C3%A9trange Title: Problème étrange Authors: Moonz Date: 2005年08月27日T15:29:10+02:00 Tags: Score: 0> Bonjour tout le monde, > / Je jouais avec fontconfig quand m'est venu l'envie de séparer l'ensemble de mon code (j'avais tout mis dans main()) en petit fonctions. Et voilà le problème: fontconfig refuse de fonctionner correctement hors de main(). Même si je mets tout dans une fonction main2 ayant la même signature que main, et que main ne contient que return main2(argc, argv), ça ne marche pas (en fait, il ne remplit pas la variable res, c'est pour ça que l'assertion res == FcFontMatch échoue). Essayez le code ci-dessous succesivement avec BUG non défini (tout le code est alors dans la fonction main()) puis avec BUG défini (le code est dans une fonction main2 appelée par main) #include <stdlib.h> #include <assert.h> #include <fontconfig/fontconfig.h> #ifdef BUG # define FUNC_NAME main2 #else # define FUNC_NAME main #endif int FUNC_NAME(int argc, char** argv) { £spaces£ £/spaces£assert(FcInit() == FcTrue); £spaces£ £/spaces£FcConfig *fc = FcConfigGetCurrent(); £spaces£ £/spaces£assert(fc != NULL); £spaces£ £/spaces£ £spaces£ £/spaces£FcPattern *pattern, *font_pat; £spaces£ £/spaces£FcResult res; £spaces£ £/spaces£ £spaces£ £/spaces£pattern = FcPatternCreate(); £spaces£ £/spaces£assert(FcPatternAddString(pattern, FC_FAMILY, (FcChar8*)"Monospace") == FcTrue); £spaces£ £/spaces£assert(FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_NORMAL) == FcTrue); £spaces£ £/spaces£assert(FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN) == FcTrue); £spaces£ £/spaces£ £spaces£ £/spaces£assert(FcConfigSubstitute(fc, pattern, FcMatchFont) == FcTrue); £spaces£ £/spaces£FcDefaultSubstitute(pattern); £spaces£ £/spaces£font_pat = FcFontMatch(fc, pattern, &res); £spaces£ £/spaces£assert(res == FcResultMatch); £spaces£ £/spaces£FcPatternPrint(font_pat); £spaces£ £/spaces£ £spaces£ £/spaces£FcPatternDestroy(pattern); £spaces£ £/spaces£FcPatternDestroy(font_pat); £spaces£ £/spaces£FcConfigDestroy(fc); £spaces£ £/spaces£FcFini(); £spaces£ £/spaces£ £spaces£ £/spaces£return 0; } #ifdef BUG int main(int argc, char** argv) { £spaces£ £/spaces£return FUNC_NAME(argc, argv); } #endif Une idée de la provenance de ce bug étrange ? Merci d'avance :)

AltStyle によって変換されたページ (->オリジナル) /