Search code examples
iosobjective-cnslog

NSLog giving error when trying to print a single unformatted integer


Hi this is third day of mine using Objective-C today I was writing few simple programs and i ecncountered the following warning

main.m:19:5: warning: passing argument 1 of 'NSLog' makes pointer from integer without a cast [enabled by default] NSLog(res);

which finally resulted in the Segmentation fault.. Here is my program..

#import <Foundation/Foundation.h>
@interface SomeClass: NSObject
{
    int x;
}
@property int x;
@end

@implementation SomeClass

@synthesize x;
@end

int main(){ 
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
SomeClass * obj = [[SomeClass alloc]init];
obj.x =20;
int res = obj.x;
NSLog(res); //error
/* But the error was not seen when I replaced the above statement with 
 NSLog(@"The value is : %d",res);
 */
[pool drain];
return 0;
}

The error message that I got was :

Compiling the source code....
$gcc `gnustep-config --objc-flags` -L/usr/GNUstep/System/Library/Libraries -lgnustep-base main.m -o demo -lm -pthread -lgmpxx -lreadline 2>&1
main.m: In function 'main':
main.m:19:5: warning: passing argument 1 of 'NSLog' makes pointer from integer without a cast [enabled by default]
     NSLog(res);
     ^
In file included from /usr/GNUstep/System/Library/Headers/Foundation/NSObject.h:30:0,
                 from /usr/GNUstep/System/Library/Headers/Foundation/FoundationErrors.h:29,
                 from /usr/GNUstep/System/Library/Headers/Foundation/Foundation.h:33,
                 from main.m:1:
/usr/GNUstep/System/Library/Headers/Foundation/NSObjCRuntime.h:146:16: note: expected 'struct NSString *' but argument is of type 'int'
 GS_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
                ^

Executing the program....
$demo 
Segmentation fault (core dumped)

Please help by making me understand why NSLog behaves like this ? Where did I go wrong? Thank you...


Solution

  • You cant declare the NSLog like that see the tutorial for NSLog its may be useful for you.

    Objective-C has a number of built-in data types:

    int – integer constant

    float – real numbers with fractional component

    double – double precision floating point number

    char – a single character

    short – short integer (2 bytes)

    long – double short

    long long – double long

    BOOL – boolean

    The utility function NSLog() can be used to print to the debug console in Xcode. NSLog() uses the NSString formatting services. The easiest way to create a NSString is to use the @”" notation. Inside a format string a % is a placeholder for a value. The character after the % determines the value expected, be it an int or a float and so on. If we declare an integer “int i = 5″ and want to print the value of i with NSLog() we can do it with NSLog(@”The value of i is %d”, i);

    You can use %d to print the value of an int, %f for a float and double, %c for a char. For a full listing of all format specifiers supported by NSString formatting methods read through the documentation.

    For More Reference Click Here

    keep learning..:)