-
Cで独自のsizeofを実装する方法
sizeof()を使用するには、変数xを使用して値を取得し、&xを使用して、そのアドレスを出力します。ここで、&xの値を増やすと、別の方法で増える可能性があります。 1バイトだけが増加した場合、つまり文字であり、増加した値が4の場合、intまたはfloatなどになります。したがって、&x + 1と&xの差をとることで、xのサイズを取得できます。 ここでは、データ型が関数で定義されていないため、マクロを使用します。そしてもう1つ、(char *)を使用してキャストしているので、その場所にいくつの文字型データを配置できるかがわかります。文字は1バイトのデータを取るため。 例 #include &
-
Cの浮動小数点数のセットビットを数える方法は?
この問題では、1つの浮動小数点値が与えられます。バイナリ表現で設定されたビット数を見つける必要があります。 たとえば、浮動小数点数が0.15625の場合、6つのセットビットがあります。典型的なCコンパイラは、単精度浮動小数点表現を使用していました。したがって、次のようになります。 ビット値に変換するには、数値を1つのポインター変数に取り込んでから、ポインターをchar*型データに型キャストする必要があります。次に、各バイトを1つずつ処理します。次に、各文字のセットビットをカウントできます。 例 #include <stdio.h> int char_set_bit_cou
-
putchar()のみを使用してCでlongintを出力します
ここでは、Cでputchar()関数を使用してlong int値を出力する方法を説明します。Cでprintf()を使用して一部の変数の値を簡単に出力できますが、ここでの制限は、putchar( 。 putchar()は文字のみを出力するために使用されることがわかっています。この関数を使用して、数値の各桁を印刷できます。 1つの数値が渡された場合、ASCII形式を取得するには、それに文字「0」を追加する必要があります。より良いアイデアを得るためにコードを見てみましょう。 例 #include <stdio.h> void print_long(long value) {  
-
main()なしで実行中のCコードを書く方法は?
ここで、メインなしで1つのプログラムを作成できるかどうかを確認します。答えはイエスです。 main()関数を持たないプログラムを書くことができます。 多くの場所で、main()がプログラム実行のエントリポイントであることがわかりました。プログラマーの観点からすると、これは真実です。システムの観点からは、それは真実ではありません。したがって、システムは最初に_start()を呼び出し、これにより環境がセットアップされ、次にmainが呼び出されます。 このプログラムを実行するには、このオプション「-nostartfiles」を使用する必要があります。 例 #include <stdio.
-
Cで独自のmemcpy()を書く
ここでは、Cでmemcpy()関数を実装する方法を説明します。memcpy()関数は、データのブロックをある場所から別の場所にコピーするために使用されます。 memcpy()の構文は次のようになります- void * memcpy(void * dest, const void * srd, size_t num); 独自のmemcpyを作成するには、指定されたアドレスをchar *に型キャストしてから、データをソースから宛先にバイト単位でコピーする必要があります。次のコードを実行するだけで、より良いアイデアを得ることができます。 例 #include<stdio.h> #inc
-
Cでのブール値の使用
Cには、boolとして事前定義されたデータ型はありません。 enumを使用してboolを作成できます。 1つの列挙型がboolとして作成され、次にfalseを配置し、trueを列挙型の要素として配置します。 falseは最初の位置にあるため、0を保持し、trueは2番目の位置にあるため、値1を取得します。これで、これをデータ型として使用できます。 例 #include<stdio.h> typedef enum { F, T } boolean; main() { boolean my_bool1, my_bool2;  
-
Cプログラミングに関する興味深い事実
ここでは、Cプログラミングに関するいくつかの興味深い事実を見ていきます。これらは以下のようなものです。 一部のswitchステートメントのcaseラベルは、if-elseステートメント内に配置できる場合があります。 例 #include <stdio.h> main() { int x = 2, y = 2; switch(x) { case 1: ;  
-
C / C ++のnextafter()およびnexttoward()
ここでは、CまたはC ++でのnextafter()およびnextforward()関数の効果を確認します。これらの関数は、math.hまたはcmathライブラリにあります。 関数がnextafter(a、b)およびnextforward(a、b)のような場合。これらの関数は、bの方向でaの次の表現可能な値を見つけるために使用されます。 nextforward()には、より正確な2番目のパラメーターbがあります。 例 #include <stdio.h> #include <math.h> main () { //The nextafter
-
Cのpthread_cancel()
threa_cancel()は、スレッドIDによって特定のスレッドをキャンセルするために使用されます。この関数は、終了のために1つのキャンセル要求をスレッドに送信します。 pthread_cancel()の構文は次のようになります- int pthread_cancel(pthread_t th); それでは、この関数を使用してスレッドをキャンセルする方法を見てみましょう。 例 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> i
-
Cのpthread_equal()
pthread_equal()関数は、2つのスレッドが等しいかどうかをチェックするために使用されます。これは0またはゼロ以外の値を返します。等しいスレッドの場合、ゼロ以外を返します。それ以外の場合は0を返します。この関数の構文は次のようになります- int pthread_equal (pthread_t th1, pthread_t th2); ここで、pthread_equal()の動作を見てみましょう。最初のケースでは、セルフスレッドをチェックして結果をチェックします。 例 #include <stdio.h> #include <stdlib.h> #incl
-
Cのpthread_self()
ここでは、Cでのpthread_self()の効果を確認します。pthread_self()関数は、現在のスレッドのIDを取得するために使用されます。この関数は、既存のスレッドを一意に識別できます。ただし、複数のスレッドがあり、1つのスレッドが完了している場合は、そのIDを再利用できます。したがって、実行中のすべてのスレッドで、IDは一意です。 例 #include <stdio.h> #include <stdlib.h> #include <pthread.h> void* func(void* p) { printf(&quo
-
Cでのfork()とexec()の違い
ここでは、Cでのfork()およびexec()システムコールの効果を確認します。フォークは、呼び出しプロセスを複製することにより、新しいプロセスを作成するために使用されます。新しいプロセスは子プロセスです。次のプロパティを参照してください。 子プロセスには独自のプロセスIDがあります。 子プロセスの親プロセスIDは、呼び出し元プロセスのプロセスIDと同じです。 子プロセスは、親のメモリロックとセマフォを継承しません。 fork()は、子プロセスのPIDを返します。値がゼロ以外の場合、それは親プロセスのIDであり、これが0の場合、これは子プロセスのIDです。 exec()システムコールは
-
CとC++の間の非互換性
ここでは、CとC++の間にいくつかの非互換性があります。 Cコンパイラを使用してコンパイルできるが、C++コンパイラではコンパイルされない一部のCコード。また、エラーを返します。 オプションで引数リストの後に引数タイプを指定する構文を使用して関数を定義できます。 例 #include<stdio.h> void my_function(x, y)int x;int y; { // Not valid in C++ printf("x = %d, y = %d", x, y); } int main() {
-
Cの衛生的マクロ
ここでは、Cでの衛生的なマクロを確認します。Cでのマクロの使用法はわかっていますが、識別子が誤って取得されたために、目的の結果が返されない場合があります。 次のコードを見ると、正しく機能していないことがわかります。 例 #include<stdio.h> #define INCREMENT(i) do { int a = 0; ++i; } while(0) main(void) { int a = 10, b = 20; //Call the macros two times for a and b
-
基本データ型と派生データ型の違い
ここでは、CまたはC++の基本データ型と派生データ型の基本的な違いを確認します。 基本的なデータ型 派生データ型 基本的なデータ型はプリミティブデータ型とも呼ばれます。 派生データ型は基本的なデータ型で構成されています。 基本的なデータ型には、int、char、float、voidなどがあります。 派生データ型は、配列、構造体、ポインターなどです。 整数または文字のデータタイプは、int、char、signed int、singed char、unsigned int、unsignedcharに分類されます ポインタは、他のいくつかの変数のアドレスを格納するために使用されます。
-
CのFILEのデータ型は何ですか?
Cではファイルを使用しました。ファイルを処理するには、タイプFILEのポインターを使用します。したがって、FILEはデータ型です。これは不透明(OPAQUE)データ型と呼ばれます。したがって、その実装は隠されています。 FILEの定義はシステム固有です。これはUbuntuシステムでのFILEの定義です- ファイル定義 struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags &nb
-
スレッド同期を使用して番号を順番に出力します
ここでは、さまざまなスレッドを使用して正しい順序で数字を印刷する方法を説明します。ここでは、n個のスレッドを作成し、それらを同期します。つまり、最初のスレッドは1を印刷し、次に2番目のスレッドは2を印刷します。 1つのスレッドが印刷しようとすると、リソースがロックされるため、その部分を使用できるスレッドはありません。 例 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> pthread_mutex_t mutex = PTHREAD_MU
-
Cでのマルチスレッドを使用した線形検索
ここでは、マルチスレッドの概念を適用して配列内の1つの要素を検索する方法を説明します。ここでのアプローチは非常に簡単です。いくつかのスレッドを作成してから、配列をさまざまな部分に分割します。別のスレッドが別の部分を検索します。その後、要素が見つかったら、フラグを有効にしてこれを識別します。 例 #include <stdio.h> #include <pthread.h> #define MAX 16 #define THREAD_MAX 4 int array[MAX] = { 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27,
-
Cで厳密なエイリアシングが必要なのはなぜですか?
ここでは、Cで厳密なエイリアシングを使用する必要がある理由を説明します。その部分について説明する前に、1つのコードを見て、出力を分析してみてください。 例 #include<stdio.h> int temp = 5; int* var = &temp; int my_function(double* var) { temp = 1; *var = 5.10; //this will
-
Cでのクリスマスツリーのプログラム
ここで、1つの興味深い問題が発生します。この問題では、クリスマスツリーをランダムに印刷する方法を見ていきます。そのため、ツリーはクリスマスツリーのライトのようにちらつきます。 クリスマスツリーを印刷するために、さまざまなサイズのピラミッドを上下に並べて印刷します。装飾的な葉の場合、ランダムな文字が指定された文字のリストから印刷されます。高さとランダム性は調整可能です。 ここでは、ツリーを生成した後、画面全体がクリアされてから再度生成されます。そのため、これはちらつきツリーのように見えます。 例 #include <stdio.h> #include <stdlib.h&g