發表文章

目前顯示的是 5月, 2018的文章

c語言-無限迴圈用法 for and while

#include<stdlib.h> #include<stdio.h> #include<windows.h> int main() { int a; //for( ; ; ) //for的用法 while(1)//while的用法 { a = (rand()%100)+1; printf("%d\n", a); printf("forver loop!\n"); Sleep(1); } return 0; }

c語言-關於#define用法

今天整理了一些#define的用法,與大家共享! 1.簡單的define定義 #define MAXTIME 1000 一個簡單的MAXTIME就定義好了,它代表1000,如果在程式裡面寫 if (i<MAXTIME){.........} 編譯器在處理這個程式碼之前會對MAXTIME進行處理替換為1000。 這樣的定義看起來類似於普通的常數定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。 2.define的“函式定義” define可以像函式那樣接受一些參數,如下 #define max(x,y) (x)>(y)?(x):(y); 這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個“函式”沒有類型檢查,就好像一個函式模板似的,當然,它絕對沒有模板那麼安全就是了。可以作為一個簡單的模板來使用而已。 但是這樣做的話存在隱患,例子如下: #define Add(a,b) a+b; 在一般使用的時候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時候就會出現問題,代數式的本意是a+b然後去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了 c*a + b*d 另外舉一個例子: #define pin (int*); pin a,b; 本意是a和b都是int型指標,但是實際上變成int* a,b; a是int型指標,而b是int型變數。 這是應該使用typedef來代替define,這樣a和b就都是int型指標了。 所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。 3.巨集的單行定義 #define A(x) T_##x #define B(x) #@x #define C(x) #x 我們假設:x=1,則有: A(1)------〉T_1 B(1)------〉'1' C(1)------〉"1" (這裡參考了hustli的文章) 3.define的多行定義 define可以替代多行的程式碼,例如MFC中的巨集定義(非常的經典,雖然讓人看了噁心) #define M...

c語言-gcc 參數

## -c 只生成 obj 檔,並沒有產生執行檔。 例:gcc -c hello.c ## -o 生成執行檔,file name 沒指定時,預設檔名為 a.out。 例:gcc -o hello hello.c ## -llibrary 設定 link 時需便用的 library。 例:gcc -o hello -lhell hello.c,需要的 library 為 libhello.a。 ## -Ldir 設定 link 時,查找 library 的路徑。 例:gcc -o hello -lhell -L. hello.c,會在源碼目錄內找尋 libhello.a 。 ## -Idir 設定 compile 時,查找 include 的路徑。 例:gcc -o hello -I. hello.c,會在源碼目錄內找尋 include 檔 。 ## -I- 取消前面所有 -Idir 的設定。 ## -g 在執行檔中,加入 debug 訊息。 ## -traditional 試圖讓編譯器支援傳統的C語言特性。 ## -static 禁止使用動態 library。 ## -share 儘量使用動態 library。 ## 聯結數個 object 成可執行檔。 例:gcc test1.o test2.o -o test 將 'test1.o'、'test2.o' 和程式庫聯結後成為可執行檔 test。 =========== 最佳化參數 ================ ## -O0 不作最佳化;然而若是之前有指定其它 LEVEL 的參數,將不會受到本參數的影響。 ## -O1 初步最佳化,作最佳化的編譯當然會花費更多的時間和記憶體;未使用本參數前 GCC編譯的原則是減少編譯成本,而且各個階段的編連是各自獨立的--可以在任一階段停下來,重新指定變數內容,且各階段的結果和一般的狀況相同,完全符合正常的程序,然而本參數會以整體四個階段一起考慮,且本參數包含許多其它參數,目的就是要減少程式大小及執行時間;使用本參數同時會將-fthread-jumps和-fdelayed-branch開啟。 ## -O2 更進一步最佳化,本參數可直接使用不需配合上一個參...

c語言-執行curl (ubuntu)

測試環境為ubuntu14.04 需安裝下列函式庫 1.apt-get install libcurl3 2.apt-get install libcurl4-openssl-dev 。 安裝完成後查看是否有/usr/include/curl 這個目錄,有說明安裝成功。 第二次編譯的時候,提示 /tmp/ccVvExfd.o: In function `main': test.c:(.text+0xa1): undefined reference to `curl_easy_init' test.c:(.text+0xd4): undefined reference to `curl_easy_setopt' test.c:(.text+0xe0): undefined reference to `curl_easy_perform' test.c:(.text+0xf0): undefined reference to `curl_easy_cleanup' collect2: ld returned 1 exit status 估計是找不到庫的引用,嘗試在編譯時,加上-l 選項即可,例如: 3.gcc get_htm.c -o get_htm -lcurl 範例程式 #include <stdio.h> #include <curl/curl.h> #include <stdlib.h> int main(int argc, char *argv[]) {     CURL *curl;             //定義CURL類型的指針         CURLcode res;           //定義CURLcode類型的變量,保存返回狀態碼     if(argc!=2)     {         printf("Usage : file <url>;/n");  ...

c語言-複製檔案(同步讀寫另一種版本)

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) {   FILE *fptr1,*fptr2;   char ch;   int count=0;   fptr1=fopen("runoob.txt","r");   fptr2=fopen("runoob2.txt","w");   if( fptr1!=NULL && fptr2!=NULL)   {       while( (ch=getc(fptr1))!=EOF)               {               printf("%c",ch);                           putc(ch,fptr2);               }              printf("\n");       fclose(fptr1);       fclose(fptr2);       printf("copy  YES!!\n");   }   else       printf("copy  NO!!\n");   system("PAUSE");   return 0; }

c語言-windows gcc socket tcp

server.c #include<winsock2.h> #include<stdio.h> int main() {   SOCKET server_sockfd, client_sockfd;   int server_len, client_len;   struct sockaddr_in server_address;   struct sockaddr_in client_address;   // 註冊 Winsock DLL   WSADATA wsadata;   if(WSAStartup(0x101,(LPWSADATA)&wsadata) != 0) {     printf("Winsock Error\n");     exit(1);                                          }   // 產生 server socket   server_sockfd = socket(AF_INET, SOCK_STREAM, 0); // AF_INET(使用IPv4); SOCK_STREAM; 0(使用預設通訊協定,即TCP)   if(server_sockfd == SOCKET_ERROR) {     printf("Socket Error\n");     exit(1);   }   // struct sockaddr_in {   //     short int               sin_family; /* AF_INT(使用IPv4) */   //...

c語言-讀寫config

#include <stdio.h>  #include <stdlib.h>  #include <string.h>    #define CONFIG_PATH "config.txt"  #define SIZE         256  typedef enum __bool { false = 0 , true = 1 , } bool ;  /*config vars*/  char path[SIZE];  char extension[SIZE];  int limit=0;  int limit1=0;  bool readConfig(){     char name[SIZE];     char value[SIZE];       FILE *fp = fopen(CONFIG_PATH, "r");     if (fp == NULL) { return false; }     while(!feof(fp)){         memset(name,0,SIZE); memset(value,0,SIZE);           /*Read Data*/         fscanf(fp,"%s = %s\n", name, value);           if (!strcmp(name, "path")){             strcpy(path, value);      ...

c語言-ubuntu底下操作mysql

1.sudo apt- get update 2.sudo apt-get install tasksel 3.sudo tasksel install lamp-server 4.sudo apt-get install mysql-server mysql-client 5.sudo apt-get install libmysqlclient15-dev 範例程式 /**  * @FileName    linux_c_mysql.c  * @Describe    A simple example for operating mysql using c programming in linux system.  * @Author      vfhky 2015.12.29 15:40 https://typecodes.com/cseries/linuxgccgconnectmysql.html  * @Compile     gcc -I/usr/local/mysql/include  -L/usr/local/mysql/lib -lmysqlclient  linux_c_mysql.c -o linux_c_mysql  * @Reference   http://dev.mysql.com/doc/refman/5.7/en/c-api-function-overview.html  */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> //MySQL connection. MYSQL *pMysqlConn; //result set. MYSQL_RES *pMysqlRes; //an instance of a row from the result. MYSQL_ROW MysqlRow; #define MAX_BUF_S...

c語言-system()函數的使用

#include<stdio.h>  #include<stdlib.h>  int  main()  {      system( "title控制軟件" );      system( "color c0" );      int  key;      printf( "輸入你想做的事情!\n" );      printf( "1.打開記事本\n" );      printf( "2.打開計算器\n" );      printf( "3.重啟電腦\n" );      printf( "0.退出\n" );      scanf( "%d" ,&key);      switch (key)      {          case  1:              system( "notepad.exe" );              break ;          case  2:              system( "calc.exe" );              break ;          case  3:               system( ...

c語言-gcc 編譯 cmd 中文亂碼

在windows cmd 底下編譯時採用 gcc -fexec-charset=BIG5 檔案名稱.c -o 檔案名稱

c語言-同步讀寫檔案

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     printf("Hello world!\n");     FILE *pf;     //int i=0;     char buf[513];     char buf0[100];     pf=fopen("runoob.txt","r"); FILE *fp_w = fopen("data_out.txt", "w");     while(fgets(buf,512,pf) != NULL)     {         printf("%s",buf); //printf("\n"); fprintf(fp_w,"%s",buf);     }     fclose(pf); printf("\n"); system("pause");     return 0; } runoob.txt aaaa fdfddf data_out.txt aaaa fdfddf