News:

Download Pelles C here: http://www.pellesc.se

Main Menu

Recent posts

#11
Bug reports / Re: bug report. setvbuf() func...
Last post by TimoVJL - March 09, 2026, 05:31:09 PM
simpler check
#include <stdio.h>

int main(void)
{
    setvbuf(stdout, NULL, _IOFBF, 7000);
    for (int i = 0; i <= 1351; i++)
        printf("%d?\n", i);
   
    return 0;
}
output:
...
1328?
329?
1330?
1331?
1332?
1333?
1334?
1335?
1336?
1337?
1338?
1339?
1340?
1341?
1342?
1343?
1344?
1345?
1346?
1347?
1348?
1349?
1350?
13511351?

'1157'
'1151158'
'1159'
size: 7003
#12
Bug reports / Re: bug report. setvbuf() func...
Last post by ander_cc - March 09, 2026, 02:26:45 PM
Quote from: TimoVJL on March 09, 2026, 11:54:49 AMhttps://en.cppreference.com/w/c/io/setvbuf
buffer size should be at least multiple of 2

I have read it last week. "the actual buffer size is usually rounded down to a multiple of 2". Just NOT use some bytes, so any number is OK.

I try it at home, my laptop. see picture.
You cannot view this attachment.
#13
Bug reports / Re: stdckdint.h bug report
Last post by TimoVJL - March 09, 2026, 12:10:59 PM
with dataset:
    int a = 655350;
    int b = 10;
    short c = 0;
Clang output:
true  c = -100
true  c = 0
true  c = -20
#14
Bug reports / Re: bug report. setvbuf() func...
Last post by TimoVJL - March 09, 2026, 11:54:49 AM
https://en.cppreference.com/w/c/io/setvbuf
buffer size should be at least multiple of 2
#15
Bug reports / Re: bug report. setvbuf() func...
Last post by ander_cc - March 09, 2026, 10:10:37 AM
Quote from: John Z on March 09, 2026, 09:56:30 AMHi ander,

I could not reproduce this.  With the setvbuf 1000, 5000, 7000, or not even use setvbuf it always ends the loop on 20000 .  I just pasted your code in. 
19998
19999
20000
Press any key to continue...

John Z
thank you for test.
I changed the number and try it again, and got different result, I got a new line "00".
Windows 11 Pro 25H2 simplified chinese. Only for chinese windows? I will try it on my laptop at home later

You cannot view this attachment.
#16
Bug reports / Re: bug report. setvbuf() func...
Last post by John Z - March 09, 2026, 09:56:30 AM
Hi ander,

I could not reproduce this.  With the setvbuf 1000, 5000, 7000, or not even use setvbuf it always ends the loop on 20000 .  I just pasted your code in. 
19998
19999
20000
Press any key to continue...

John Z
#17
Bug reports / bug report. setvbuf() function...
Last post by ander_cc - March 09, 2026, 07:53:45 AM
I have learned setvbuf() function last week. But got a strange error.
The setvbuf function last argument is buffer size. When I set 1000, 2000, 3000, 4000, will be OK, but when I set it to 5000 or 7000, I will get a additional line.
Then, I try the same code in gcc 15.2, it is correct.
#include <stdio.h>

int main(void)
{
setvbuf(stdout, NULL, _IOFBF, 7000);
for (int i = 0; i < 20001; i++)
printf("%d\n", i);

return 0;
}
You cannot view this attachment.
#18
Bug reports / Re: stdckdint.h bug report
Last post by ander_cc - March 09, 2026, 07:30:13 AM
Quote from: John Z on March 08, 2026, 09:26:14 PM👍👍👍

Definitely!  Thanks Timo.
Better output too -

    long int a = 65536;
    long int b = 65535;//10
    int c = 0;
---------output---------
result: true  c = -65536
result: false c = 131071
result: false c = 1
Press any key to continue...

John Z

Thank you for your reply, John Z.
The "long int" and the "int" are 32bit value in Pelles c.
I get the false when only the first argument overflow in function ckd_add, I think it is a bug.
#include <stdio.h>
#include <stdckdint.h>
int main(void)
{
int a = 655350;
int b = 10;
short int c = 0;

bool result = true;
result = ckd_add(&c, a, b); //out of range of short. a and b are int, c is short int.
if (result == true)
{
puts("true");
}else{
puts("false");
}
printf("c = %d ", c);

return 0;
}
#19
Bug reports / Re: stdckdint.h bug report
Last post by ander_cc - March 09, 2026, 07:23:31 AM
Quote from: TimoVJL on March 08, 2026, 03:10:42 PMhttps://cppreference.net/c/numeric/ckd_mul.html
thank you for your reply,  TimoVJL. I have read it. please try my test code.
Pelles C 13.01 will print :
false
c = 0
but gcc 15.2 will print :
true
c = 0

And I read the Pelles C help file for "stdckdint.h". I think the return value depends on first argument type. But Pelles C returns false when the first argument overflow in following code.
#include <stdio.h>
#include <stdckdint.h>
int main(void)
{
int a = 655350;
int b = 10;
short int c = 0;

bool result = true;
result = ckd_add(&c, a, b); //out of range of short. a and b are int, c is short int.
if (result == true)
{
puts("true");
}else{
puts("false");
}
printf("c = %d ", c);

return 0;
}
#20
Bug reports / Re: stdckdint.h bug report
Last post by John Z - March 08, 2026, 09:26:14 PM
👍👍👍

Definitely!  Thanks Timo.
Better output too -

    long int a = 65536;
    long int b = 65535;//10
    int c = 0;
---------output---------
result: true  c = -65536
result: false c = 131071
result: false c = 1
Press any key to continue...

John Z