私が言うのコードが午前##使用:コードへオペレータ
#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 */
}
オプションの変更:
#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 */
}
誰もがこのコードセグメントが何を意味するのか説明できますか?このコードのinput
は文字列(希望ではない)か変数ですか?変数の場合、なぜコンパイラは宣言されていない変数エラーをスローしないのですか?
'#define'の難読化であるように思わプリプロセッサマクロを作成する(ことを見てそれが何であるかわからない場合は、アップ)。この場合、マクロは 'newdef'と呼ばれ、2つのパラメータをとります。 'a'と' b'です。 'newdef(input、5)'はマクロ定義( 'char a ## [...]')に展開され、 'a'が全て' input'に展開され、全て 'b'が' 5'に展開されます。 '##'は連結演算子なので、 '## ## sumthing'は' inputsumthing'(この場合)になります。 – Biffen
##プリプロセッサの連結演算子です。 –