2016-11-14 6 views
0

数日前にキーボードに問題があり、キーボードに(を入力できないという人がいました。 Cを書いたときの最初のことは、文字をどこかからコピーしてそれを貼り付けるか、プリプロセッサディレクティブ#defineを使うことでした。一度私が#defineを使用しようとすると、gccは#define OB (のようなものを書くことができず、私はかなり理解しています。これに類似した文章を書くことが可能ですか?#defineを使って句読記号を置き換えてもいいですか?Cで句読子の置き換えを定義する

+2

は、代わりにあなたのコードやコンパイラを微調整しようとしている、あなたは、キーボード入力をフックして、OSを微調整し、単に希望する記号にオーバーマップがあります。私は過去にいくつかのキーが欠けていたキーボードでこれをやってきました。 – Bauss

+1

あなたの友人は[代替のオペレータ表現](http://ja.cppreference.com/w/c/language/operator_alternative)に興味があるかもしれません。 –

+1

'gcc'は' #define OB( '' -DOB = '(' ')を理解することができませんが、ちょうど試みました。 – aragaer

答えて

1

(のトリグラフがある場合は、それをお勧めします。さもなければ、あなたの解決策はマクロで動作するかもしれませんが、残念なことにCやヘッダファイルで書かれていると、あなたが望むように解析することはできません。ただし、gccを使用すると、そのマクロは-Dオプションを使用して直接指定できます。

例:

int main OB) { 
    printf OB "Hello, world\n"); 
} 

私は、次のコマンドを使用して、それをコンパイルすることができます:cc -o test test.c -DOB='('を。私は'を追加する必要がありました。そうでなければbashはそれを受け入れません。

またCPPFLAGSに追加のパラメータを追加しmakeを使用することができます。CPPFLAGS+="-DOB='('" make test - もう一度、あなたはそれ以外のすべてのシェルが引用符で囲まれていない(を理解しないだろういつもより引用符が必要です。もちろん、Makefileに直接CPPFLAGS+=-DOB='('を追加することもできます。

編集: 実際には、コード内にマクロを持つことができます。しかしgccには(がマクロ識別子の一部ではないと伝えなければなりません。以下は私のために働いた:

#define OB \ 
    (
int main OB) { 
    printf OB "Hello, world\n"); 
} 
+0

これは完全に動作します。 – NMilev

関連する問題