url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)alias_path, 0, NO);
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)alias_path, 0, NO);
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)alias_path, 0, NO);
déjà la différence entre Bus Error et Segmentation fault est-elle
significative ?
déjà la différence entre Bus Error et Segmentation fault est-elle
significative ?
déjà la différence entre Bus Error et Segmentation fault est-elle
significative ?
Ta variable alias_path est de type VALUE, un pointeur opaque spécifique
à Ruby, que tu cast sauvagement en CFStringRef. Ca ne peut pas
fonctionner (un bon petit bouquin sur le C te dirait des tas de choses
intéressantes au sujet des pointeurs et des casts... :>).
Ce qu'il faut faire:
/* Créer une CFStringRef à partir de la VALUE */
/* (l'encoding peut varier) */
CFStringRef path = CFStringCreateWithCString(
kCFAllocatorDefault,
StringValuePtr(alias_path),
kCFStringEncodingUTF8);
/* Créer une CFURLRef à partir de la CFStringRef */
CFURLRef url = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
path,
kCFURLPOSIXPathStyle,
false);
Ne pas oublier de faire le ménage avec:
CFRelease(path);
CFRelease(url);
PS: le cast sauvage de QFalse en Boolean est hautement suspect aussi (en
plus d'être totalement inutile ici, d'ailleurs).
Ta variable alias_path est de type VALUE, un pointeur opaque spécifique
à Ruby, que tu cast sauvagement en CFStringRef. Ca ne peut pas
fonctionner (un bon petit bouquin sur le C te dirait des tas de choses
intéressantes au sujet des pointeurs et des casts... :>).
Ce qu'il faut faire:
/* Créer une CFStringRef à partir de la VALUE */
/* (l'encoding peut varier) */
CFStringRef path = CFStringCreateWithCString(
kCFAllocatorDefault,
StringValuePtr(alias_path),
kCFStringEncodingUTF8);
/* Créer une CFURLRef à partir de la CFStringRef */
CFURLRef url = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
path,
kCFURLPOSIXPathStyle,
false);
Ne pas oublier de faire le ménage avec:
CFRelease(path);
CFRelease(url);
PS: le cast sauvage de QFalse en Boolean est hautement suspect aussi (en
plus d'être totalement inutile ici, d'ailleurs).
Ta variable alias_path est de type VALUE, un pointeur opaque spécifique
à Ruby, que tu cast sauvagement en CFStringRef. Ca ne peut pas
fonctionner (un bon petit bouquin sur le C te dirait des tas de choses
intéressantes au sujet des pointeurs et des casts... :>).
Ce qu'il faut faire:
/* Créer une CFStringRef à partir de la VALUE */
/* (l'encoding peut varier) */
CFStringRef path = CFStringCreateWithCString(
kCFAllocatorDefault,
StringValuePtr(alias_path),
kCFStringEncodingUTF8);
/* Créer une CFURLRef à partir de la CFStringRef */
CFURLRef url = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
path,
kCFURLPOSIXPathStyle,
false);
Ne pas oublier de faire le ménage avec:
CFRelease(path);
CFRelease(url);
PS: le cast sauvage de QFalse en Boolean est hautement suspect aussi (en
plus d'être totalement inutile ici, d'ailleurs).
Un Segmentation Fault indique un problème de MMU : le programme essaye
d'accéder à une zone mémoire non mappée en mémoire virtuelle du programme.
Donc typiquement mauvais pointeur. Pour la petite histoire les premiers unix
utilisaient de la mémoire segmentée alors qu'elle est maintenant mappée avec
des pages, mais le terme est resté.
Un Bus Error est une erreur d'entrée/sortie physique et dépend surtout du
type de périphérique à l'adresse pointée. Sur un bus PCI par exemple, cela
peut indiquer que le périphérique ne répond pas. Sur un bus mémoire, cela
peut-être une lecture à une adresse impaire... Cela dépend du CPU et du
périphérique.
Un Segmentation Fault indique un problème de MMU : le programme essaye
d'accéder à une zone mémoire non mappée en mémoire virtuelle du programme.
Donc typiquement mauvais pointeur. Pour la petite histoire les premiers unix
utilisaient de la mémoire segmentée alors qu'elle est maintenant mappée avec
des pages, mais le terme est resté.
Un Bus Error est une erreur d'entrée/sortie physique et dépend surtout du
type de périphérique à l'adresse pointée. Sur un bus PCI par exemple, cela
peut indiquer que le périphérique ne répond pas. Sur un bus mémoire, cela
peut-être une lecture à une adresse impaire... Cela dépend du CPU et du
périphérique.
Un Segmentation Fault indique un problème de MMU : le programme essaye
d'accéder à une zone mémoire non mappée en mémoire virtuelle du programme.
Donc typiquement mauvais pointeur. Pour la petite histoire les premiers unix
utilisaient de la mémoire segmentée alors qu'elle est maintenant mappée avec
des pages, mais le terme est resté.
Un Bus Error est une erreur d'entrée/sortie physique et dépend surtout du
type de périphérique à l'adresse pointée. Sur un bus PCI par exemple, cela
peut indiquer que le périphérique ne répond pas. Sur un bus mémoire, cela
peut-être une lecture à une adresse impaire... Cela dépend du CPU et du
périphérique.
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, path_ref, 0,
Qfalse);
c'est curieux que la constante "kCFAllocatorDefault" soit retrouvée mais
pas "NO"
mais je n'ai fait qu'un "#include "CFURL.h""...
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, path_ref, 0,
Qfalse);
c'est curieux que la constante "kCFAllocatorDefault" soit retrouvée mais
pas "NO"
mais je n'ai fait qu'un "#include "CFURL.h""...
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, path_ref, 0,
Qfalse);
c'est curieux que la constante "kCFAllocatorDefault" soit retrouvée mais
pas "NO"
mais je n'ai fait qu'un "#include "CFURL.h""...
Non, ce n'est pas curieux, c'est normal. YES/NO sont spécifiques à
Objective-C, QFalse/QTrue sont spécifique à Ruby, etc. Et chacun
définissant des valeurs dans leur coin pour ces deux constantes, il est
plus qu'hasardeux de les utiliser de manière interchangeable.
Quand une methode doit recevoir un BOOL il vaut mieux passer un BOOL et
pas autre chose, quand une fonction doit recevoir un Boolean il vaut
mieux passer un Boolean et pas autre chose, etc, etc. Et pour passer
d'un type à un autre, le cast n'est *absolument pas* suffisant.
Pourquoi ?
Hé oui -> YES != Qtruemais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
Non, ce n'est pas curieux, c'est normal. YES/NO sont spécifiques à
Objective-C, QFalse/QTrue sont spécifique à Ruby, etc. Et chacun
définissant des valeurs dans leur coin pour ces deux constantes, il est
plus qu'hasardeux de les utiliser de manière interchangeable.
Quand une methode doit recevoir un BOOL il vaut mieux passer un BOOL et
pas autre chose, quand une fonction doit recevoir un Boolean il vaut
mieux passer un Boolean et pas autre chose, etc, etc. Et pour passer
d'un type à un autre, le cast n'est *absolument pas* suffisant.
Pourquoi ?
Hé oui -> YES != Qtrue
mais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
Non, ce n'est pas curieux, c'est normal. YES/NO sont spécifiques à
Objective-C, QFalse/QTrue sont spécifique à Ruby, etc. Et chacun
définissant des valeurs dans leur coin pour ces deux constantes, il est
plus qu'hasardeux de les utiliser de manière interchangeable.
Quand une methode doit recevoir un BOOL il vaut mieux passer un BOOL et
pas autre chose, quand une fonction doit recevoir un Boolean il vaut
mieux passer un Boolean et pas autre chose, etc, etc. Et pour passer
d'un type à un autre, le cast n'est *absolument pas* suffisant.
Pourquoi ?
Hé oui -> YES != Qtruemais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
Luc Heinrich wrote:mais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
oui, c'était fait ça, mais n'est-ce qu'une convention comme le dit
<http://www.linux-kheops.com/doc/ansi-c/node22.htm> ou est-ce que
systématiquement le "path" de recherche est utilisé dans le cas des <>
pas dans le cas des "" (user) ?
Luc Heinrich <luc@honk-honk.com> wrote:
mais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
oui, c'était fait ça, mais n'est-ce qu'une convention comme le dit
<http://www.linux-kheops.com/doc/ansi-c/node22.htm> ou est-ce que
systématiquement le "path" de recherche est utilisé dans le cas des <>
pas dans le cas des "" (user) ?
Luc Heinrich wrote:mais je n'ai fait qu'un "#include "CFURL.h""...
#include <CFUrl.h>, avec des <> !
oui, c'était fait ça, mais n'est-ce qu'une convention comme le dit
<http://www.linux-kheops.com/doc/ansi-c/node22.htm> ou est-ce que
systématiquement le "path" de recherche est utilisé dans le cas des <>
pas dans le cas des "" (user) ?
En C on peut faire :
#include <nom>
#include "nom"
#include token
[...]
Sous unix, il est de tradition que "nom" soit directement un nom de fichier
(dont le PATH est défini dans le compilateur) contenant l'en-tête à inclure.
Sous unix, il est aussi de tradition que la seconde syntaxe inclut plus de
répertoires dans le PATH.
En C on peut faire :
#include <nom>
#include "nom"
#include token
[...]
Sous unix, il est de tradition que "nom" soit directement un nom de fichier
(dont le PATH est défini dans le compilateur) contenant l'en-tête à inclure.
Sous unix, il est aussi de tradition que la seconde syntaxe inclut plus de
répertoires dans le PATH.
En C on peut faire :
#include <nom>
#include "nom"
#include token
[...]
Sous unix, il est de tradition que "nom" soit directement un nom de fichier
(dont le PATH est défini dans le compilateur) contenant l'en-tête à inclure.
Sous unix, il est aussi de tradition que la seconde syntaxe inclut plus de
répertoires dans le PATH.
typedef unsigned long VALUE;
#define Qfalse ((VALUE)0)
#define Qtrue ((VALUE)2)
int main(int argc, char const* argv[])
{
BOOL true1 = YES;
VALUE true2 = Qtrue;
if (true1 == true2)
{
printf("YES == Qtruen");
}
else
{
printf("YES != Qtruen");
}
return 0;
}
Hé oui -> YES != Qtrue
typedef unsigned long VALUE;
#define Qfalse ((VALUE)0)
#define Qtrue ((VALUE)2)
int main(int argc, char const* argv[])
{
BOOL true1 = YES;
VALUE true2 = Qtrue;
if (true1 == true2)
{
printf("YES == Qtruen");
}
else
{
printf("YES != Qtruen");
}
return 0;
}
Hé oui -> YES != Qtrue
typedef unsigned long VALUE;
#define Qfalse ((VALUE)0)
#define Qtrue ((VALUE)2)
int main(int argc, char const* argv[])
{
BOOL true1 = YES;
VALUE true2 = Qtrue;
if (true1 == true2)
{
printf("YES == Qtruen");
}
else
{
printf("YES != Qtruen");
}
return 0;
}
Hé oui -> YES != Qtrue
ah bon tu veux bien dire la version #include "nom", j'aurais cru que le
path inclurait moins de répetoires, donc tu veux dire que ça inclus "."
et ce qui est déjà inclus dans path pour la version #include <nom> ???
ah bon tu veux bien dire la version #include "nom", j'aurais cru que le
path inclurait moins de répetoires, donc tu veux dire que ça inclus "."
et ce qui est déjà inclus dans path pour la version #include <nom> ???
ah bon tu veux bien dire la version #include "nom", j'aurais cru que le
path inclurait moins de répetoires, donc tu veux dire que ça inclus "."
et ce qui est déjà inclus dans path pour la version #include <nom> ???