نکات توابع سی و بعضی مهارتها

saalek110

Well-Known Member
لیست تمام توابع C و کتابخانه استاندارد POSIX
لیست تمام توابع زبان برنامه نویسی C به همراه جزئیات هر یک:
C + POSIX API Documentation IEEE 1003.1-2008
من بعد از یادگیری جاوا و کار کردن با java API documentation همیشه این سوال گوشه ذهنم بود که چرا زبان سی همچین چیزی نداره. داشتن یک لیست کامل از تمام توابع زبان برنامه نویسی خیلی حیاتی هست طوری که بدون آن برنامه نویسی اون حرفه ای بودن خودش رو از دست میده و دست و بال ادم بسته میشه. هیچ کاری از خودش نمیتونه انجام بده و فقط باید مثال های دیگران رو بکار بگیره. یک برنامه نویس حسابی نباید وابسته به 4 تا تابع تو جزوه و کتاب باشه و باید بتونه مستقلا هر چی دلش خواست بنویسه. حالا بعد از چند سال تقریبا به جواب سوالم دارم نزدیک میشم:
برای اینکه موقع نوشتن یک برنامه سی ببینیم چه توابعی در اختیار داریم راه های زیر رو باید با هم ترکیب کنیم:
1- جستجو در C + POSIX API Documetation IEEE 1003.1-2008
2- جستجو در MSDN
3- جستجو در GNU C Library Manual
4- زدن کلید Ctrl+Space در محیط برنامه نویسی (مثلا Eclipse) برای باز شدن auto-complete یا Content-Assist
5- باز کردن هدر مربوطه به صورت درختی و مشاهده توابع درون header
شرح برخی نکات فنی و اینکه POSIX چیست:
- زبان C بر خلاف جاوا به تنهایی توابع زیادی ندارد کتابخانه های جانبی به آن قدرت میدهند. از مهمترین کتابخانه ها که استاندارد IEEE شده POSIX هست که در GCC لینوکس کامل پشتیبانی میشود ولی برای استفاده در ویندوز باید از کامپایلر Cygwin یا Mingw استفاده شود و کامپایلر مایکروسافت posix رو پیش فرض نمیشناسد.
- POSIX : Portable Operating System Interface for Unix
- با برنامه نویسی تحت { Eclipse + Mingw-Cygwin } با کتابخانه استاندارد POSIX ، کد شما هم تحت ویندوز قابل کامپایل خواهد بود هم تحت لینوکس. بعبارتی کد شما portable - cross platform خواهد بود. بر خلاف برنامه نویسی با visual studio مایکروساقت. ضمنا در کامپایلر های فوق (gnu gcc) کتابخانه POSIX بطور پیش فرض وجود دارد و نیازی به دانلود جداگانه ان نیست.
- برای برنامه نویسی شبکه و نیز ریسمان (thread) ، خود C استاندارد تابع ندارد . اما POSIX توابع کاملی در این زمینه ها دارد (sys/socket.h برای شبکه و pthread.h برای چند پروسه ای کردن یا همان ریسمان بندی ). طبیعی هست که استفاده از این کتابخانه استاندارد به کتابخانه های native ویندوز (winsock2.h برای شبکه) شرف دارد.
- در هنگام کامپایل برنامه تحت ویندوز با Mingw ممکن است برخی هدر ها که native ویندوز باشند توسط linker شناخته نشوند و خطای undefined reference to function دهند در این حالت باید مسیر library هدر فوق رو به linker بشناسونید ، با دستورات زیر : ( lws2_32- برای هدر winsock2.h و lpthread.dll- برای هدر pthread.h )
همچنین باید فایل dll این هدر ها همراه exe برنامه تون باشه . این فایلها رو میتونید از پوشه mingw/bin کپی کنید. libws2_32.a و libpthread.dll.a نام کتابخانه هایی است در پوشه mingw/lib .

لیست کل توابع سی
 
آخرین ویرایش:

saalek110

Well-Known Member
دوستان خواننده هر کس در مورد تابع یا مهارت های مورد لزوم رایج سی مطلبی دید اینجا بزنه.

au.jpg
c.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه ساده سی برای سرگرمی:
PHP:
#include<stdio.h>
#include<conio.h>
void main()
{
char ch[]="I AM AN IDIOT.";
char c='A';
int i=0;
while(c)
{
c=getch();
printf("%c\a",ch[i]);
i++;
if(i==14)
{
printf(" "); i=0;
}
}
}
اجرا کنید ببینید چی میشه.
می توانید قبل اجرا حدس بزنید چه اجرایی دارد. بعد اجرا کنید.
اگر خوب حدس بزنید نوعی کوییز برای آموزشهای این تاپیک هم محسوب میشه.
 

saalek110

Well-Known Member
این صفحه هم جالبه. انواع hello world.
Evolution of a Programmer — Hello World

جک برنامه نویسی: منبع
شماره 1
Definition, Programmer: An organism that turns caffeine and pizza into software.
شماره 2
Software developers like to solve problems. If there are no problems available, they will create their own problems. It’s an addiction Hongkiat
شماره 3:
Definition, Algorithm: Word used by programmers when they do not want to explain what they did.
شماره 4:
I'd like to make the world a better place, but they won't give me the source code...
 
آخرین ویرایش:

saalek110

Well-Known Member
جک برنامه نویسی: منبع
شماره 1:
Q. How did the programmer die in the shower?
A. He read the shampoo bottle instructions: Lather. Rinse. Repeat.
شماره 2:
Why do programmers always mix up Halloween and Christmas?
Because Oct 31 equals Dec 25.
شماره 3 : ولی این جوک نیست. یک نکته داره.باینری فکر کن.
There are only 10 kinds of people in this world: those who know binary and those who don’t.
شماره 4:
A man is smoking a cigarette and blowing smoke rings into the air. His girlfriend becomes irritated with the smoke and says, “Can’t you see the warning on the cigarette pack? Smoking is hazardous to your health!”

To which the man replies, “I am a programmer. We don’t worry about warnings; we only worry about errors.”
شماره 5:
CD-ROM: Consumer Device, Rendered Obsolete in Months
PCMCIA: People Can’t Memorize Computer Industry Acronyms
ISDN: It Still Does Nothing
SCSI: System Can’t See It
MIPS: Meaningless Indication of Processor Speed
DOS: Defunct Operating System
WINDOWS: Will Install Needless Data On Whole System
OS/2: Obsolete Soon, Too
PnP: Plug and Pray
APPLE: Arrogance Produces Profit-Losing Entity
IBM: I Blame Microsoft
MICROSOFT: Most Intelligent Customers Realize Our Software Only Fools Teenagers
COBOL: Completely Obsolete Business Oriented Language
LISP: Lots of Insipid and Stupid Parentheses
MACINTOSH: Most Applications Crash; If Not, The Operating System Hangs
AAAAA: American Association Against Acronym Abuse.
WYSIWYMGIYRRLAAGW: What You See Is What You Might Get If You’re Really Really Lucky And All Goes Well.
 

saalek110

Well-Known Member
صدا:
PHP:
#include <windows.h>
#include<stdio.h>
#include<conio.h>

int main(void) {

Beep(523,500);

  getch();
   return 0;
}
هدر ویندوز برای بیپ است.
هدر conio.h برای getch است تا برنامه فوری بسته نشود.

------------------------
نواختن یک نت:
PHP:
#include <windows.h>
#include<stdio.h>
#include<conio.h>

int main(void) {


    Beep(1568, 200);
    Beep(1568, 200);
    Beep(1568, 200);
    Beep(1245, 1000);
    Beep(1397, 200);
    Beep(1397, 200);
    Beep(1397, 200);
    Beep(1175, 1000);
  getch();


   return 0;
}
در dev c تست شد.
 
آخرین ویرایش:

saalek110

Well-Known Member
s3.jpg

دانلود کد بلوک
Download binary
w1.jpg
codeblocks-17.12mingw-setup.exe را دانلود کنید. دو تا لینک دانلود هست. اولی مشکل ندارد. دومی بحث تحریم و ... دارد.

من با dev c کار می کردم ولی حالا تصمیم گرفتم با کدبلوک کار کنم. روی بحث های تاپیک فکر نکنم تاثیری داشته باشد. البته اختلافاتی بین کامپیایلرها حتما هست ولی در مورد محدوده کار ما خیلی کم اتفاق می افتد.
 
آخرین ویرایش:

saalek110

Well-Known Member
تفاوت رفتار کامپایلرها:
به برنامه زیر نگاه کنید:
PHP:
my_function()
{
}
int main(void) {

   return 0;
}
تابع my_function تعریف شده ولی نوع خروجی آن مشخص نشده که مثلا int است یا void.
کامپایلر Dev c هیچ اخطاری نمی دهد.
ولی code::blocks فرض می کند int بوده و می گوید
کد:
|In function 'int my_function()'
warning: no return statement in function returning non-void [-Wreturn-type]|
یعنی میگه تابع غیر void چرا return ندارد.
منظور تفاوت رفتار کامپایلرها بود.

کلا code::blocks وارنینگ های زیادی می دهد که Dev c نمی دهد.
من فکر می کنم این وارنینگ ها مفید است چون به برنامه نویس کمک می کند از اشتباه دور باشد.

a3.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
مطالب زیر فقط نقل است. تایید صحت آنها نیست.
What is the main difference between code blocks and Dev-C++?
DEV C++ is used for C or C++ programming.
But code blocks can be used for different programming languages also like java.
Code blocks is cross platform(can be used in different operating systems). DEV C++ is for only Windows platform only.

منبع

-----------------------
I have used Turbo C++, Borland C++, DevC++ and Code::Blocks.
Turbo and Borland are little bit old fashioned. DevC++ is also not very good because its latest version was released in 2005 (I guess). I hated using DevC++ because in it, variables are sometimes overwritten and you have to initialize every variable even if your program has <10 lines. Using DevC++ I got absurd results then I moved on to Code::Blocks and still using it. It is the best IDE you can have on Windows. It also works on Linux. I've used it on Linux Mint (No idea about other distros).

منبع
 

saalek110

Well-Known Member
Time
PHP:
#include <stdio.h>

#include <time.h>


int main () {
    time_t seconds;

    seconds = time(NULL);
    printf("Seconds since January 1, 1970 = %ld\n", seconds);

    return(0);
}

منبع

a1.jpg

PHP:
// C program to demonstrate
// example of time() function.

#include <stdio.h>
#include <time.h>

int main()
{
    time_t seconds;

     // Stores time seconds
    time(&seconds);
    printf("Seconds since January 1, 1970 = %ld\n", seconds);

    return 0;
}
PHP:
Output:
Seconds since January 1, 1970 = 1538123990
البته نتیجه مربوط به سایت رفرنس است. منبع

PHP:
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <time.h>
int main ()
{
    time_t seconds;
    seconds = time (NULL);
    printf ("Number of hours since 1970 Jan 1st " \
            "is %ld \n", seconds/3600);
    return 0;
}
منبع
PHP:
OUTPUT:
Number of hours since 1970 Jan 1st is 374528
 
آخرین ویرایش:

saalek110

Well-Known Member
CPU clock

PHP:
#include <stdio.h>
#include <time.h>


int main () {
    int i;
    clock_t CPU_time_1 = clock();
    printf("CPU start time is : %d \n", CPU_time_1);
    for(i = 0; i < 150000000; i++);
    clock_t CPU_time_2 = clock();
    printf("CPU end time is : %d", CPU_time_2);

    return(0);
}
PHP:
 OUTPUT:
CPU start time is : 0

CPU end time is  : 380000
منبع

------------------------
The C library function clock_t clock(void) returns the number of clock ticks elapsed since the program was launched. To get the number of seconds used by the CPU, you will need to divide by CLOCKS_PER_SEC.

On a 32 bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.
منبع

PHP:
#include <time.h>
#include <stdio.h>

int main () {
   clock_t start_t, end_t, total_t;
   int i;

   start_t = clock();
   printf("Starting of the program, start_t = %ld\n", start_t);

   printf("Going to scan a big loop, start_t = %ld\n", start_t);
   for(i=0; i< 10000000; i++) {
   }
   end_t = clock();
   printf("End of the big loop, end_t = %ld\n", end_t);

   total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
   printf("Total time taken by CPU: %f\n", total_t  );
   printf("Exiting of the program...\n");

   return(0);
}
کد:
Starting of the program, start_t = 0
Going to scan a big loop, start_t = 0
End of the big loop, end_t = 20000
Total time taken by CPU: 0.000000
Exiting of the program...

-----------------------
کد از سایت دیگر:
کد:
#include <stdio.h>
#include <time.h>
volatile unsigned sink;
int main (void)
{
  clock_t start = clock();
  for(size_t i=0; i<10000000; ++i)
      sink++;
  clock_t end = clock();
  double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
  printf("for loop took %f seconds to execute \n", cpu_time_used);
}
کد:
for loop took 0.033492 seconds to execute
منبع
 
آخرین ویرایش:

saalek110

Well-Known Member
تاریخ و ساعت و روز هفته

PHP:
#include <stdio.h>
#include <time.h>
#define LEN 150
int main ()
{
   char buf[LEN];
   time_t curtime;
   struct tm *loc_time;
   //Getting current time of system
   curtime = time (NULL);
   // Converting current time to local time
   loc_time = localtime (&curtime);
   // Displaying date and time in standard format
   printf("%s", asctime (loc_time));
   strftime (buf, LEN, "Today is %A, %b %d.\n", loc_time);
   fputs (buf, stdout);
   strftime (buf, LEN, "Time is %I:%M %p.\n", loc_time);
   fputs (buf, stdout);
   return 0;
}
منبع
کد:
Sat Sep 22 01:15:03 2012
Today is Saturday, Sep 22.

Time is 01:15 AM.

a10.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
تاریخ و ساعت و روز هفته

PHP:
#include <stdio.h>    
#include <time.h>
int main()
{
    struct tm strtime;
    time_t timeoftheday;
    strtime.tm_year = 2008-1900;
    strtime.tm_mon = 1;
    strtime.tm_mday = 4;
    strtime.tm_hour = 02;
    strtime.tm_min = 30;
    strtime.tm_sec = 38;
    strtime.tm_isdst = 0;
    timeoftheday = mktime(&strtime);
    printf(ctime(&timeoftheday));
    return 0;
        }
COMPILE & RUN
OUTPUT:
Mon Feb 4 02:30:38 2008
C time functions - C tutorial for beginners with examples
 
آخرین ویرایش:

saalek110

Well-Known Member
Why C and not assembly language?
While assembly language can provide speed and maximum control of the program, C provides portability.
Different processors are programmed using different Assembly languages and having to choose and learn only one of them is too arbitrary.
Assembly, while extremely powerful, is simply too difficult to program large applications and hard to read or interpret in a logical way.
منبع
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا