Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 02 Dec 2004 10:51:29 +0100
From:      Andrea Venturoli <ml.diespammer@netfence.it>
To:        Rob <spamrefuse@yahoo.com>
Cc:        FreeBSD <freebsd-questions@freebsd.org>
Subject:   Re: gcc violates const-ness of variable?
Message-ID:  <41AEE5A1.2030405@netfence.it>
In-Reply-To: <41AEC075.50207@yahoo.com>
References:  <41AEC075.50207@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a cryptographically signed message in MIME format.

--------------ms000002080506010301040502
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Rob wrote:
 > Hi,
 >
 > This should probably be discussed in the GNU gcc mailinglist.
 > But I'm more familiar here, and I first want to share it here
 > with other FreeBSD users.
 >
 > I'm surprised about this piece of code:
 >
 >  #include<stdio.h>
 >  int main()
 >  {
 >   const int n = 0;
 >   scanf("%d", &n);
 >   printf("%d\n", n);
 >   return 0;
 >  }
 >
 > With gcc compiler, the constant variable 'n' will be overwritten
 > by the scanf statement. With g++ it (silently) is not.
 > So, I get following:
 >
 > $ gcc -W -Wall code.c
 > code.c: In function `main':
 > code.c:5: warning: writing into constant object (arg 2)
 > $ ./a.out
 > 9
 > 9
 > $ g++ -W -Wall code.c
 > code.c: In function `int main()':
 > code.c:5: warning: writing into constant object (arg 2)
 > $ ./a.out
 > 9
 > 0
 >
 > Is this a bug in gcc, or a feature?

Well, I do not know the precise answer, I'd have to look in the 
standards and have no time right now, so I'll just give you some pointers...

gcc -W -Wall code.c -> C compiler/you are compiling C code
g++ -W -Wall code.c -> C++ compiler/you are compiling C++ code

The source seems a mix of *standard* C and C++: stdio.h does not exist 
in C++, it might only be there for legacy code, but it works most of the 
times; IIRC "const" does not exist in *standardized* C...
gcc should ignore that (I guess), unless you specify -traditional.

"const" exists in C9X, which is not yet an official standard. I think 
gcc will support that, possibly with some command line switch or 
#define; I'm sure on Debian GNU/Linux some of the library features are 
turned on the latter way.


  bye
	av.



--------------ms000002080506010301040502
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIHdDCC
A7YwggMfoAMCAQICAQQwDQYJKoZIhvcNAQEEBQAwgZExCzAJBgNVBAYTAklUMRAwDgYDVQQI
EwdCb2xvZ25hMRAwDgYDVQQHEwdCb2xvZ25hMREwDwYDVQQKEwhOZXRGZW5jZTEkMCIGA1UE
AxMbTmV0RmVuY2UgQ2VydGlmaWNhdGUgTWFzdGVyMSUwIwYJKoZIhvcNAQkBFhZwb3N0bWFz
dGVyQG5ldGZlbmNlLml0MB4XDTA0MDcwNjE0NTczM1oXDTA3MDcwNjE0NTczM1owgY4xCzAJ
BgNVBAYTAklUMRAwDgYDVQQIEwdCb2xvZ25hMRIwEAYDVQQHEwlWaWxsYW5vdmExETAPBgNV
BAoTCE5ldEZlbmNlMRkwFwYDVQQDExBBbmRyZWEgVmVudHVyb2xpMSswKQYJKoZIhvcNAQkB
FhxhbmRyZWEudmVudHVyb2xpQG5ldGZlbmNlLml0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDNut5pvhl9kcTaS4DwvTZA7I6G2cuNTi0zVYf3ObXn+eV5KPrUe+iIj5tsJHhZSFie
Mmr/sU8+tmtL9w4F+IYqoJZMrj3pyBLwUuyG/UCA97j7iOunDXdQaezt3RjPTHDgZ1Estw42
O/tdOksw1RGz/Pcl1nYDAx3Qxb1s+CQDwwIDAQABo4IBHTCCARkwCQYDVR0TBAIwADAsBglg
hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFL+G
85rXpNrBqicRBxrsKKXAbTqxMIG+BgNVHSMEgbYwgbOAFGuQcrsEAmOxnk0uGCXT6UCTGFCD
oYGXpIGUMIGRMQswCQYDVQQGEwJJVDEQMA4GA1UECBMHQm9sb2duYTEQMA4GA1UEBxMHQm9s
b2duYTERMA8GA1UEChMITmV0RmVuY2UxJDAiBgNVBAMTG05ldEZlbmNlIENlcnRpZmljYXRl
IE1hc3RlcjElMCMGCSqGSIb3DQEJARYWcG9zdG1hc3RlckBuZXRmZW5jZS5pdIIBADANBgkq
hkiG9w0BAQQFAAOBgQCmYkfL9jqgRsIobKrZstcYZZXA0hMVKfMwUYddCKWJYjpoynV7k5pC
CKo8ZLdfj9mhCnOkGLbhVpQL7ySMzAH5IbD2qgowAf06zV3rsmzmspw5iyL6iZQsJpoT+owg
FtSpw2UgUuhWmq004PqgasdzlaJg3LRS1ACHmyPZKRUYaTCCA7YwggMfoAMCAQICAQQwDQYJ
KoZIhvcNAQEEBQAwgZExCzAJBgNVBAYTAklUMRAwDgYDVQQIEwdCb2xvZ25hMRAwDgYDVQQH
EwdCb2xvZ25hMREwDwYDVQQKEwhOZXRGZW5jZTEkMCIGA1UEAxMbTmV0RmVuY2UgQ2VydGlm
aWNhdGUgTWFzdGVyMSUwIwYJKoZIhvcNAQkBFhZwb3N0bWFzdGVyQG5ldGZlbmNlLml0MB4X
DTA0MDcwNjE0NTczM1oXDTA3MDcwNjE0NTczM1owgY4xCzAJBgNVBAYTAklUMRAwDgYDVQQI
EwdCb2xvZ25hMRIwEAYDVQQHEwlWaWxsYW5vdmExETAPBgNVBAoTCE5ldEZlbmNlMRkwFwYD
VQQDExBBbmRyZWEgVmVudHVyb2xpMSswKQYJKoZIhvcNAQkBFhxhbmRyZWEudmVudHVyb2xp
QG5ldGZlbmNlLml0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNut5pvhl9kcTaS4Dw
vTZA7I6G2cuNTi0zVYf3ObXn+eV5KPrUe+iIj5tsJHhZSFieMmr/sU8+tmtL9w4F+IYqoJZM
rj3pyBLwUuyG/UCA97j7iOunDXdQaezt3RjPTHDgZ1Estw42O/tdOksw1RGz/Pcl1nYDAx3Q
xb1s+CQDwwIDAQABo4IBHTCCARkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNT
TCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFL+G85rXpNrBqicRBxrsKKXAbTqx
MIG+BgNVHSMEgbYwgbOAFGuQcrsEAmOxnk0uGCXT6UCTGFCDoYGXpIGUMIGRMQswCQYDVQQG
EwJJVDEQMA4GA1UECBMHQm9sb2duYTEQMA4GA1UEBxMHQm9sb2duYTERMA8GA1UEChMITmV0
RmVuY2UxJDAiBgNVBAMTG05ldEZlbmNlIENlcnRpZmljYXRlIE1hc3RlcjElMCMGCSqGSIb3
DQEJARYWcG9zdG1hc3RlckBuZXRmZW5jZS5pdIIBADANBgkqhkiG9w0BAQQFAAOBgQCmYkfL
9jqgRsIobKrZstcYZZXA0hMVKfMwUYddCKWJYjpoynV7k5pCCKo8ZLdfj9mhCnOkGLbhVpQL
7ySMzAH5IbD2qgowAf06zV3rsmzmspw5iyL6iZQsJpoT+owgFtSpw2UgUuhWmq004Pqgasdz
laJg3LRS1ACHmyPZKRUYaTGCA0swggNHAgEBMIGXMIGRMQswCQYDVQQGEwJJVDEQMA4GA1UE
CBMHQm9sb2duYTEQMA4GA1UEBxMHQm9sb2duYTERMA8GA1UEChMITmV0RmVuY2UxJDAiBgNV
BAMTG05ldEZlbmNlIENlcnRpZmljYXRlIE1hc3RlcjElMCMGCSqGSIb3DQEJARYWcG9zdG1h
c3RlckBuZXRmZW5jZS5pdAIBBDAJBgUrDgMCGgUAoIICCTAYBgkqhkiG9w0BCQMxCwYJKoZI
hvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNDEyMDIwOTUxMjlaMCMGCSqGSIb3DQEJBDEWBBQ6
1sMjKAU8INIvR9GufcQHhtPzpTBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMHMA4GCCqG
SIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDCBqAYJ
KwYBBAGCNxAEMYGaMIGXMIGRMQswCQYDVQQGEwJJVDEQMA4GA1UECBMHQm9sb2duYTEQMA4G
A1UEBxMHQm9sb2duYTERMA8GA1UEChMITmV0RmVuY2UxJDAiBgNVBAMTG05ldEZlbmNlIENl
cnRpZmljYXRlIE1hc3RlcjElMCMGCSqGSIb3DQEJARYWcG9zdG1hc3RlckBuZXRmZW5jZS5p
dAIBBDCBqgYLKoZIhvcNAQkQAgsxgZqggZcwgZExCzAJBgNVBAYTAklUMRAwDgYDVQQIEwdC
b2xvZ25hMRAwDgYDVQQHEwdCb2xvZ25hMREwDwYDVQQKEwhOZXRGZW5jZTEkMCIGA1UEAxMb
TmV0RmVuY2UgQ2VydGlmaWNhdGUgTWFzdGVyMSUwIwYJKoZIhvcNAQkBFhZwb3N0bWFzdGVy
QG5ldGZlbmNlLml0AgEEMA0GCSqGSIb3DQEBAQUABIGAomEaPFpgTbaoTODjGgaAwVG26ZU2
hMmmQDqNn7BULfn92O1+OaR43kTXoVgAVaYi1l0G0NqO/q/xMRoqfuEljwOMNW4Vz2QBcUpw
R6aR0CezLyXJAYlg6E3p3x7p5QC6h8GhHxgm2p3CwC2fIN5tbTdd7nYauyC90uGHID4a0y0A
AAAAAAA=
--------------ms000002080506010301040502--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41AEE5A1.2030405>