2015-01-21 119 views
0

你能解释下面的代码吗?我们如何使用#define作为关键字C?你真的可以用C语言重新定义关键字吗?

#include <stdio.h> 
#define int int* 
int main(void) { 

    int *p; 
    int q; 
    p = 10; 
    q = 5; 
    printf("%d %d", p, q); 
    // your code goes here 
    return 0; 
} 

输出:

10 5 
+3

那不是定义关键字。这是一个宏观。 https://msdn.microsoft.com/en-us/library/teas0593.aspx – 2015-01-21 04:01:54

+1

您无法定义关键字。 – 2015-01-21 04:02:09

+14

'#define int int *' - 男性因犯罪较少而死亡。打开你的编译器警告。这段代码是假的。 – 2015-01-21 04:08:55

回答

7

#define int int*是一个预处理宏。如果要为类型定义自己的同义词,请使用typedef。您无法使用您未创建的语言创建关键字。

样品:

#include <stdio.h> 
typedef int * myIntPtr; 

int main(void) { 

    int i = 10; 
    myIntPtr x = &i; 
    printf("%d", *x); 
    return 0; 
} 

输出:

10 

而且在语义上作出的intint *是没有意义的。

+0

“typedef”不是简单地创建同义词吗?我的意思是'int *'是预定义的,任何'struct'你会使用'typedef'必须由用户定义? – 2015-01-21 04:07:01

+1

@ shree.pat18 - 是的,我的陈述是误导 - 纠正它。 – Sadique 2015-01-21 04:08:43

0
#define a b 

将改变所有 “A” 到 “B”,在你的源程序中#define后

#include <stdio.h> 
#define int int* 

int main(void) { 
    int *p; 
    int q; 
    p = 10; 
    q = 5; 
    printf("%d %d", p, q); 
    // your code goes here 
    return 0; 
} 

将变更为

int main(void) { 
    int **p; 
    int *q; 
    p = 10; 
    q = 5; 
    printf("%d %d", p, q); 
    // your code goes here 
    return 0; 
} 
相关问题