Portál AbcLinuxu, 9. června 2025 13:40
/* The functions */ PCREPOSIX_EXP_DECL int regcomp(regex_t *, const char *, int); PCREPOSIX_EXP_DECL int regexec(const regex_t *, const char *, size_t, regmatch_t *, int); PCREPOSIX_EXP_DECL size_t regerror(int, const regex_t *, char *, size_t); PCREPOSIX_EXP_DECL void regfree(regex_t *); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* End of pcreposix.h */na Ubuntu mám balík libpcre3 a v nej je súbor pcreposix.h, ktorý končí takto:
/* The functions */ PCREPOSIX_EXP_DECL int pcreposix_regcomp(regex_t *, const char *, int); PCREPOSIX_EXP_DECL int pcreposix_regexec(const regex_t *, const char *, size_t, regmatch_t *, int); PCREPOSIX_EXP_DECL size_t pcreposix_regerror(int, const regex_t *, char *, size_t); PCREPOSIX_EXP_DECL void pcreposix_regfree(regex_t *); #ifdef __cplusplus } /* extern "C" */ #endif #define regcomp pcreposix_regcomp #define regexec pcreposix_regexec #define regerror pcreposix_regerror #define regfree pcreposix_regfree #endif /* End of pcreposix.h */Otázky:
1) libpcre3 - Perl 5 Compatible Regular Expression Library - runtime files
2) ano, vyber si konkretny balik a citaj stranku
3) ano, lebo programator je lenivy :) a usestri kratsou variacou 10 tuknuti/stlaceni do klavesnice (ak nema doplnovanie) .... a nie to premenovanie, vid.
[ Source: pcre3 ]To som predtým prehliadol, resp. som nevedel, že to tam mám hľadať, keďže ubuntu často nepoužívam. Dotiahnem odpoveď tým, že tam sa dá nájsť:
kde to prvé je premenovaný archív toho, čo vydalo pcre.org, a to druhé sú zmeny aplikované Debianom a následne Ubuntu. 3. To sme sa zasa trocha nepochopili. regcomp()/regexec()/regfree() je POSIX API, a pcre knižnica ho ponúkala. Ale Debian sa z nejakého dôvodu rozhodol (pomerne dávno) ABI zmeniť a tie #define-y tam asi pridali, aby zachovali aspoň API na úrovni zdrojákov. Nie je mi jasné, prečo to spravili, ale asi sa tým zjavne vyhli práve problému, na ktorý som narazil: konflikt s duplicitnou implementáciou v libc. Zvláštne je, že sa tá zmena nedostala naspäť do projektu pcre.org a tým pádom ani do Slackware-u. A Slackware asi nebude mať chuť teraz tú zmenu prevziať, práve kvôli rozbitiu ABIpcre3_8.38.orig.tar.gz 2,005.2 kB 8a353fe1450216b6655dfcf3561716d9 pcre3_8.38-3.1.debian.tar.gz 31.5 kB 943442eab19bb0381d1b663ca8cd23e8
Je prikaz predprocesora, ktory vytvori predprocesorovu premennu s danou hodnotou. A vsade, kde sa pouzije ta premenna, tak predprocesor ju nahradi hodnotou. ... Hodnota premenne su z pohladu predprocesora vzdy typu string.
/* definicia premennej */
#define VERSION 1
Hodnota predprocesorovej premennej mozes definovat aj trebars nazvom lubovolneho vyrazu, tj. napr. aj premennej, funkcie, kod atd..
#define NOVY_RIADOK (putchar('\0'))
Kedze predprocesorove premmenne sa vedia iba priradit hodnota a zmazat (#define a $undef), tak sa skor diva ako nahradzovac/vkladac textu (co aj realne je).
void new_line(void)
{
putchar('\n');
}
#define new_line nl
Predprocesor slovo new_line nahradi hodnotou nl. Takze ak mam 15 krat v kode volat new_line a nechce sa mi pisat, tak napisem nl(); a predprocesor to nahradi na new_line(), tj. na realnu funkciu.
V sume. Chces pouzivat bezproblovo prenositelne verzie, pouzivaj dlhe nazvy a nemas problem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.