Ani*_*ban 1 c gcc c-preprocessor
我有一个代码说:
#include<stdio.h>
typedef struct string{
char *ch_ptr;
}str_t;
#define newdef(a,b) \
char a ## sumthing[b * sizeof(str_t)]; \
str_t *a = (str_t *)a ## sumthing
main(){
newdef(input,5);
/* some lines of code */
}
Run Code Online (Sandbox Code Playgroud)
对代码的可选更改:
#include<stdio.h>
typedef struct string{
char *ch_ptr;
}str_t;
#define newdef(a,b) \
char a ## sumthing[b * sizeof(str_t)]; \
str_t *var1 = (str_t *)a ## sumthing
main(){
newdef(input,5)="Hello";
printf("%s\n",input);
/* some lines of code */
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这段代码的含义吗?就是input在这一串代码(希望不是)或变量?如果变量那么为什么编译器不会抛出未声明的变量错误?
它是一个预处理器连接运算符,只能在定义预处理器宏时使用.
让我们举一个简单的例子
#define CONCAT(a, b) a ## b
int CONCAT(foo, bar);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,调用CONCAT(foo, bar)将被替换为
int foobar;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |