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 - Yesterday at 01:10:28 AM
how about check function setvbuf() error too ?
#12
Bug reports / Re: bug report. setvbuf() func...
Last post by John Z - March 09, 2026, 09:59:50 PM
Test this - works for all buffer size setting I tried -

#include <stdio.h>

int main(void)
{   // all problems go away when next line is added
    printf("test result");// initializes stdout I/O ?
   
    setvbuf(stdout, NULL, _IOFBF, 7003);
    for (int i = 0; i <= 1351; i++)
        printf("%d?\n", i);
   
    return 0;
}

Maybe because of this statement in the help file?
"The setvbuf function may be used only after the stream pointed to by stream has been associated with an open file and before any other operation (other than an unsuccessful call to setvbuf) is performed on the stream. "

I am thinking that printf is initializing the stdout stream before setvbuf is called on stdout so no problem.

John Z
#13
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
#14
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.
#15
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
#16
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
#17
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.
#18
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
#19
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.
#20
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;
}